我有这个当前的查询:
这导致:
我想把所有这些“status_changes”按天唯一地分解出来,这样我就可以看到每天的状态变化,并在最后总结它们。它看起来像这样:
这可能吗?我的主要目标是使第 12 行“count(distinct driver_id) as status_changes”在一天中是唯一的,而不是在整个“spot_Check_begin”到“spot_check_end”时间范围内。
也许我错过了可能的不同查询的更大图景?
我有这个当前的查询:
这导致:
我想把所有这些“status_changes”按天唯一地分解出来,这样我就可以看到每天的状态变化,并在最后总结它们。它看起来像这样:
这可能吗?我的主要目标是使第 12 行“count(distinct driver_id) as status_changes”在一天中是唯一的,而不是在整个“spot_Check_begin”到“spot_check_end”时间范围内。
也许我错过了可能的不同查询的更大图景?
您可以将 SUM 与 CASE WHEN 结合使用,而不是 COUNT。
例如:
SELECT
sum(CASE WHEN created_at::DATE = CURRENT_DATE THEN 1 ELSE 0 END) as status_changes_1,
sum(CASE WHEN created_at::DATE = CURRENT_DATE - interval '1 day' THEN 1 ELSE 0 END) as status_changes_2,
sum(CASE WHEN created_at::DATE = CURRENT_DATE - interval '2 day' THEN 1 ELSE 0 END) as status_changes_3,
FROM
在开发版本中,我们可以将 FILTER 与聚合函数一起使用(http://www.postgresql.org/docs/devel/static/sql-expressions.html#SYNTAX-AGGREGATES)。让我们希望我们可以在不久的将来使用它。
count(driver_id) FILTER (WHERE created_at = CURRENT_DATE) AS status_changes_1