CREATE TABLE employee
(
joining_date date,
employee_type character varying,
name character varying ,
typeid integer
);
insert into employee VALUES
('2021-08-12','as','hjasghg', 1),
('2021-08-13', 'Rs', 'sa', 1),
('2021-08-14','asktyuk','hjasg', 1),
('2021-09-12','as','hjasghg', 1),
('2021-09-13', 'Rs', 'sa', 1),
('2021-09-14','asktyuk','hjasg', 1),
('2022-08-02','as','hjasghg', 2),
('2022-08-03','as','hjasghg', 2),
('2022-08-04', 'Rs', 'sa', 2),
('2022-08-05','asktyuk','hjasg', 2);
我想获得包含不同类型ID的每个月的第一个数据的阅读的列。
我试过应用分区,但似乎无法提取正确的数据。
with cte_a as
(select row_number() over (partition by typeid order by joining_date asc) sno, * from employee)
select * from cte_a where sno = 1;
我期望从日期'2021-09-12'
、'2021-08-12'
、'2022-08-02'
得到结果,但最终结果中只得到了'2022-08-02'
、'2021-08-12'
。
1条答案
按热度按时间e0bqpujr1#
demo:db<>fiddle
您可以将
DISTINCT ON
与date_part()
函数结合使用date_part('month', ...)
将日期“标准化”为一个月的第一天(或者如果您愿意,可以去掉日部分)DISTINCT ON
返回所有有序组中的第一个,在这种情况下,返回typeid
和规范化日期的组