带日期范围的 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;