返回从最新日期算起的最后 365 内的值 ORACLE SQL
Posted
技术标签:
【中文标题】返回从最新日期算起的最后 365 内的值 ORACLE SQL【英文标题】:return values within the last 365 counting from newest date ORACLE SQL 【发布时间】:2016-01-28 17:15:03 【问题描述】:[ORACLE SQL] 我正在尝试编写一个查询,该查询返回从最后一次(或最新日期;换句话说)输入数据算起的过去 365 天内单个列中的所有值。
例如:表:EMPLOYEE_TIMESTAMPS
EMPLOYEE_ID TIMESTAMP_DATE
1 AUG 2014
1 AUG 2015
2 JAN 2016
1 FEB 2016
1 OCT 2016
结果数据应该只有最后两行,因为它应该从 2016 年 10 月起向后计算 365 天。
我尝试使用以下代码,但由于 MAX 函数而导致 [ORA-00934: group function is not allowed here]。使用 SYSDATE 无法完成工作,因为最后一个数据可能是在几个月前添加的。
SELECT * FROM EMPLOYEE_TIMESTAMPS
WHERE TIMESTAMP_DATE >= MAX(TIMESTAMP_DATE) -365;
我对编程还很陌生,所以我仍然很难传达我的想法。感谢您的帮助。
【问题讨论】:
..WHERE TIMESTAMP_DATE >=(select MAX(TIMESTAMP_DATE) -365 from EMPLOYEE_TIMESTAMPS);
【参考方案1】:
一种做你想做的事的方法是使用窗口函数:
SELECT *
FROM (SELECT et.*,
MAX(TIMESTAMP_DATE) OVER (PARTITION BY EMPLOYEE_ID) as MAX_TIMESTAMP_DATE
FROM EMPLOYEE_TIMESTAMPS
) et
WHERE TIMESTAMP_DATE >= MAX_TIMESTAMP_DATE - 365;
你的版本的问题是使用了聚合函数MAX()
。首先,查询中没有GROUP BY
。其次,WHERE
子句中不允许使用这些函数。
上面版本中的MAX()
被称为解析函数,因为它有OVER
子句。
【讨论】:
以上是关于返回从最新日期算起的最后 365 内的值 ORACLE SQL的主要内容,如果未能解决你的问题,请参考以下文章
javascript中slice(),splice(),split(),substring(),substr()使用方法