【发布时间】:2023-03-16 15:23:01
【问题描述】:
我发布了这个here,但也决定在这里发布。
我有一个包含以下数据的表格:
id date_changed color_start color_end
-------------------------------------------------------------------
1 2020-05-27 16:33:52.000 green yellow
1 2020-06-11 20:12:18.000 yellow red
1 2020-06-11 20:20:58.000 red green
2 2021-03-03 14:31:44.000 yellow red
2 2020-08-06 14:59:21.000 green yellow
3 2021-04-28 12:36:45.000 green red
...
例如,id #2 的项目在 2020-08-06 14:59:21 从绿色变为黄色,然后在 2021-03-03 14:31:44 从黄色变为读取。我需要计算两个时间范围内有多少项处于绿色、黄色、红色状态。
我通过做一些研究来尝试以下查询,基本上列出过去一年的事件或每天,但这并不是我真正想要的。
SELECT d.date, items.id,
count(CASE WHEN items.color_end = 'yellow' THEN 1 ELSE null END) as yellow_count,
count(CASE WHEN items.color_end = 'green' THEN 1 ELSE null END) as green_count,
count(CASE WHEN items.color_end = 'red' THEN 1 ELSE null END) as red_count,
count(CASE WHEN items.color_end = 'yellow' THEN 1 ELSE null end) +
count(CASE WHEN items.color_end = 'green' THEN 1 ELSE null END) +
count(CASE WHEN items.color_end = 'red' THEN 1 ELSE null END) as total_count
FROM (SELECT to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD') AS date
FROM generate_series(0, 365, 1) AS offs
) d LEFT OUTER JOIN
events items
ON d.date = to_char(date_trunc('day', item.date_changed), 'YYYY-MM-DD')
GROUP BY d.date, items.id;
【问题讨论】:
-
如果您也添加所需的输出将会很有帮助。
标签: sql postgresql count