带日期范围的 PostgreSQL 更新
PostgreSQL Update with date range
我有这个有效的声明,但它是肆无忌惮的,因为它总结了整个专栏,我想介绍日期范围,但我遇到了错误。
这是有效的方法
UPDATE payroll_employee e
SET hours = l.total
FROM (SELECT employee, SUM(end_date - start_date) AS total
FROM payroll_timelog
GROUP BY employee) l
WHERE e.id = l.employee
我想介绍一个日期过滤器。
然后我尝试了这个 CTE,
WITH cte AS (
SELECT employee_id, end_date SUM(end_date - start_date) AS total
FROM payroll_timelog
WHERE employee_id = 1, AND end_date > 2020-09-01
)
UPDATE payroll_employee e
SET hours = total
FROM cte
WHERE e.id = 1;
已尝试将日期转换为 2020-09-01::date、2020-09-01::timestamp 等,但仍然无法正常工作。任何帮助将不胜感激。
我认为你只是有语法错误:
WITH cte AS (
SELECT employee_id, SUM(end_date - start_date) AS total
FROM payroll_timelog
WHERE employee_id = 1 AND end_date > '2020-09-01'
GROUP BY employee_id
)
UPDATE payroll_employee e
SET hours = cte.total
FROM cte
WHERE e.id = 1;
我有这个有效的声明,但它是肆无忌惮的,因为它总结了整个专栏,我想介绍日期范围,但我遇到了错误。
这是有效的方法
UPDATE payroll_employee e
SET hours = l.total
FROM (SELECT employee, SUM(end_date - start_date) AS total
FROM payroll_timelog
GROUP BY employee) l
WHERE e.id = l.employee
我想介绍一个日期过滤器。 然后我尝试了这个 CTE,
WITH cte AS (
SELECT employee_id, end_date SUM(end_date - start_date) AS total
FROM payroll_timelog
WHERE employee_id = 1, AND end_date > 2020-09-01
)
UPDATE payroll_employee e
SET hours = total
FROM cte
WHERE e.id = 1;
已尝试将日期转换为 2020-09-01::date、2020-09-01::timestamp 等,但仍然无法正常工作。任何帮助将不胜感激。
我认为你只是有语法错误:
WITH cte AS (
SELECT employee_id, SUM(end_date - start_date) AS total
FROM payroll_timelog
WHERE employee_id = 1 AND end_date > '2020-09-01'
GROUP BY employee_id
)
UPDATE payroll_employee e
SET hours = cte.total
FROM cte
WHERE e.id = 1;