postgresql 从季度日期表中选择本季度

wnavrhmk  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(3)|浏览(255)

我有下表:
| 季度开始|
| - -|
| 2016年12月30日|
| 2017年3月31日|
| 2017年6月30日|
| 2017年9月29日|
| 2017年12月二十九日|
| 2018年3月30日|
| 二零一八年六月二十九日|
| 2018年9月28日|
| 2018年12月二十八日|
| 2019年3月二十九日|
| 2019年6月28日|
| 2019年9月27日|
| 2019年12月27日|
| 2020年3月27日|
| 2020年6月26日|
| 2020年9月25日|
| 2021年1月1日|
| 2021年2月4日|
| 2021年2月7日|
| 2021年1月10日|
| 2021年12月31日|
| 2022年4月1日|
| 2022年7月1日|
| 2022年9月30日|
| 2022年12月30日|
| 2023年3月24日|
| 2023年6月30日|
| 2023年9月29日|
| 2023年12月二十九日|
| 2024年3月29日|
| 2024年6月28日|
| 2024年9月27日|
| 2025年3月1日|
| 2025年4月4日|
| 2025年10月3日|
| 2026年2月1日|
| 2026年3月4日|
| 2026年7月3日|
| 2026年2月10日|
| 2027年1月1日|
| 2027年2月4日|
| 2027年2月7日|
| 2027年1月10日|
如何根据此表和当前日期始终选择当前季度?例如,当前季度为“09/12/2022”,如何确保始终选择当前季度?
多谢
更新:我已经运行的一些建议如下

SELECT 
    quarter_start,
    EXTRACT (QUARTER FROM quarter_start)
FROM
    odwh_work.sdc_2027
WHERE
    EXTRACT (QUARTER FROM quarter_start) =  EXTRACT (QUARTER FROM current_date)
ORDER BY 1 DESC

但我还是不回来了2022-12-09

ymdaylpp

ymdaylpp1#

如果行不多,可以

select * from foo where extract('quarter' from 'Quarter Start') = extract('quarter' from now());

但是要注意,这不能利用日期上的索引,因为季度(1,2,3,4)本身不是日期,而是一个数字。

create table stack (id serial, quarter date);
insert into stack (quarter) values ('2022-09-15');
insert into stack (quarter) values ('2022-10-10');

select * from stack;
 id |  quarter   
----+------------
  2 | 2022-09-15
  3 | 2022-10-10

select * from stack where extract('quarter' from quarter) = extract('quarter' from now());
 id |  quarter   
----+------------
  3 | 2022-10-10
oipij1gg

oipij1gg2#

如果我理解正确的话,您希望找到既与当前季度匹配又与当前年度匹配的日期。可以这样做:

SELECT yourdate FROM yourtable 
WHERE EXTRACT('quarter' FROM yourdate) =  EXTRACT('quarter' FROM now())
AND EXTRACT('year' FROM yourdate) = EXTRACT('year' FROM now());

当然,此查询可以查找满足这些条件的多个日期。如果只想查找其中最新的日期,请使用MAX

SELECT MAX(yourdate) FROM yourtable 
WHERE EXTRACT('quarter' FROM yourdate) =  EXTRACT('quarter' FROM now())
AND EXTRACT('year' FROM yourdate) = EXTRACT('year' FROM now());

请参阅db<>fiddle

izj3ouym

izj3ouym3#

不确定您期望的结果,但可以通过提取来获得季度:

SELECT EXTRACT(quarter from '30/12/2022'::date)

相关问题