如何从当前月份获取前12个月的最后一天数据

时间:2019-08-13 12:00:40

标签: sql date oracle11g

Oracle中有一个名为emp_table的表,其中有emp_name(雇员名称),emp_att(值仅是P或A)和日期(以时间戳记)。我想查看当前月前12个月的最后一天(月的结束日期)的emp_att值。请分享适当的查询以获取该信息。

2 个答案:

答案 0 :(得分:0)

像这样吗?

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> with emp_table (emp_name, emp_att, cdate) as
  2    (select 'Scott', 'P', date '2019-03-31' from dual union all
  3     select 'Scott', 'A', date '2019-04-30' from dual union all
  4     select 'Scott', 'A', date '2019-05-18' from dual union all  --> not the last day in May
  5     select 'Scott', 'P', date '2019-05-31' from dual union all
  6     select 'Scott', 'A', date '2019-06-13' from dual            --> not the last day in June
  7    )
  8  select emp_name, emp_att, cdate
  9  from emp_table
 10  where cdate >= add_months(sysdate, -12)
 11    and cdate = last_day(cdate);

EMP_N E CDATE
----- - ----------
Scott P 31.03.2019
Scott A 30.04.2019
Scott P 31.05.2019

SQL>

答案 1 :(得分:0)

假设您的情况下的最后日期可能不是该月的最后日期,并且所有月份的所有雇员的最后日期都相同:

SELECT  *  FROM 
(SELECT A.*,
LAST_VALUE(EMP_DATE) OVER(PARTITION BY TO_CHAR(EMP_DATE,'MON-YYYY') ORDER BY TO_CHAR(EMP_DATE,'MON-YYYY')) LAST_DT
FROM EMP_DATE A
WHERE 
EMP_DATE BETWEEN ADD_MONTHS(TO_CHAR(SYSDATE,'DD-MON-YYYY'), -12) AND TO_CHAR(SYSDATE,'DD-MON-YYYY'))
WHERE EMP_DATE=LAST_DT
  • last_value函数将给出最后的工作日期 特定月份

  • select语句中的条件将日期限制为从当前日期开始的一年,您可以使用自己的日期更改sysdate