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