我有这个当前的查询:
导致:
我想把所有这些“status_changes”分开,并在白天将它们分开,以便我可以在白天看到状态变化,并在最后总结它们。它看起来像这样:
这可能吗?我的主要目标是使第12行“count(distinct driver_id)as status_changes”在白天是唯一的,而不是在整个“spot_Check_begin”到“spot_check_end”时间范围内。
也许我错过了可能不同查询的大局?
答案 0 :(得分:1)
您可以将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