[英]How to apply partition on the table to get first data of each month?
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);
我想获取包含每个月不同 typeid 的第一个数据读数的列。
我试过应用分区,但我似乎无法提取正确的数据。
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'
结果。
您可以将DISTINCT ON
与date_part()
function 结合使用
SELECT DISTINCT ON (typeid, date_part('month', joining_date))
*
FROM employee
ORDER BY typeid, date_part('month', joining_date)
date_part('month', ...)
将日期“规范化”为一个月的第一天(如果您愿意,也可以削减日期部分)DISTINCT ON
返回所有有序组中的第一个,在这种情况下是typeid
组和您的规范化日期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.