我有一个表日期表。有操作日期列:
operat_day |
---|
01.01.2021 |
2021年1月2日 |
2021年1月3日 |
********** |
********** |
2022年12月31日 |
可以通过按季度将日期分组来实现这一点。然后找到该季度的MAX日期。
SELECT ADD_MONTHS(TRUNC(td.oper_day, 'Q'), 3) next_quarter_begin
,MAX(td.oper_day) max_date_prev_quarter
FROM table_days td
GROUP BY ADD_MONTHS(TRUNC(td.oper_day, 'Q'), 3)
ORDER BY 1
您似乎在问如何找到每个季度的最后一个日期,如果是,则GROUP BY
是TRUNC
到该季度开始的数据,并找到每个季度中的最大日期(因为它将是下一季度开始前的最晚日期(。
如果要确保值来自当前季度之前的季度,则可以添加WHERE
过滤器以忽略当前季度或更高季度的值。
像这样:
SELECT TO_CHAR(TRUNC(oper_day, 'Q'), 'YYYY-Q') AS quarter,
MAX(oper_day) AS last_oper_day_in_quarter
FROM table_name
WHERE oper_day < TRUNC(SYSDATE, 'Q')
GROUP BY TRUNC(oper_day, 'Q')
对于样本数据:
CREATE TABLE table_name (oper_day) AS
SELECT DATE '2022-01-01' + LEVEL - 1
FROM DUAL
CONNECT BY DATE '2022-01-01' + LEVEL - 1 <= SYSDATE;
输出:
QUARTER | LAST_OPER_DAY_IN_QUARTER |
---|---|
2022-1 | 31-MAR-22 |