繁体   English   中英

如何在表上应用分区以获取每个月的第一个数据?

[英]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 ONdate_part() function 结合使用

SELECT DISTINCT ON (typeid, date_part('month', joining_date))
    *
FROM employee
ORDER BY typeid, date_part('month', joining_date)
  1. date_part('month', ...)将日期“规范化”为一个月的第一天(如果您愿意,也可以削减日期部分)
  2. DISTINCT ON返回所有有序组中的第一个,在这种情况下是typeid组和您的规范化日期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM