我有一张表,其结构如下:小提琴
create table test(id,status,datechange)as values
('011AVN', 11, '2024-06-21 08:27:13'::timestamp)
,('011AVN', 12, '2024-06-21 08:28:16')
,('011AVN', 21, '2024-07-04 15:01:21')
,('011AVN', 22, '2024-07-07 20:30:30')
,('011AVN', 31, '2024-07-11 17:38:01')
,('011AVN', 32, '2024-07-12 20:30:15')
,('011AVN', 33, '2024-07-31 20:58:54')
,('011AVN', 22, '2024-10-16 16:13:33')
,('011AVN', 22, '2024-12-02 18:03:19')
,('011AVN', 31, '2024-12-10 21:53:04')
,('011AVN', 32, '2024-12-11 22:04:26')
,('011AVN', 33, '2025-01-03 10:51:54');
我需要知道每个月第一天的状态。例如:
2024-07-01
,状态是12
,2024-08-01
状态是33
我一直尝试将它与通过这种方式生成的系列结合起来:
select generate_series('2024-07-01', now(), interval '1 month') as s;
但我有点困惑。
怎么样
索引
datechange
应该会使这个查询表现良好。(我的回答详细阐述了Laurenz Albe 的回答,他首先发表并值得称赞;它添加了不同的
id
时间表)这里有一个SQLFiddle 来演示它。
查看示例
小提琴