PostgreSQL 选择最近的 6 月份

PostgreSQL Selecting The Closest Previous Month of June

我正在尝试为抓取最近的 6 月 1 日之后的查询写一篇文章。例如,今天是 10/2/2018。如果我今天 运行 查询,我需要它使用日期 6/1/2018。如果我在 5/29/2019 运行 它,它仍然需要在 6/1/2018 抓取。如果我在 6/2/2019 运行 它,它应该会在 6/1/2019 抓取。如果我在 6/2/2022 运行 它,它应该在 6/1/2022 抓取,依此类推。

我想我需要从这样的事情开始:

 SELECT CASE WHEN EXTRACT(MONTH FROM NOW())>=6 THEN 'CURRENT' ELSE 'RF LAST' END AS X
 --If month is greater than or equal to 6, you are in the CURRENT YEAR (7/1/CURRENT YEAR)
 --If month is less than 6, then reference back to the last year (YEAR MINUS ONE)

而且我认为我需要 t运行日期然后执行操作。我不确定采用哪种方法(如果我应该在时间戳中添加一年,例如“6/1/1900”,或者我是否应该尝试拆解日期部分以执行操作。我不断收到错误消息诸如 "operator does not exist" 之类的尝试。我尝试过的事情包括:

 SELECT (CURRENT_DATE- (CURRENT_DATE-INTERVAL '7 months'))
 --This does not work as it just gives me a count of days.

 SELECT (DATE_TRUNC('month',NOW())+TIMESTAMP'1900-01-01 00:00:00')
 --Variations of this just don't work and generally error out.

使用 case 表达式来确定您是需要使用当前年份还是上一年(第 1 至 5 个月)

case when extract(month from current_date) >= 6 then 0 else -1 end

然后将其添加到从 current_date 中提取的年份,例如使用 to_date()

select to_Date('06' || (extract(year from current_date)::int + case when extract(month from current_date) >= 6 then 0 else -1 end)::varchar, 'mmYYYY');

您也可以在 postgres 9.4+

中使用 make_date(year int, month int, day int)
select make_date(extract(year from current_date) + case when extract(month from current_date) >= 6 then 0 else -1 end, 6, 1) ;

If month lower than 6, trunc year and minus 6 months. Else trunc year and add 6 months.

set datestyle to SQL,MDY;

select 
case when (extract( month from (date::date)))<6 then date_trunc('year',date)-'6 month'::interval 
else date_trunc('year',date)+'6 months'::interval 
end as closest_prev_june,
another_column,
another_column2
from mytable;

但是格式是默认的,假设您有一个名为日期的列。

If you want to do this with now(), change date columns with now() function.