返回从最新日期算起的最后 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的主要内容,如果未能解决你的问题,请参考以下文章

shell 提取文件名和目录名的一些方法

数组截取

js的数组方法整理

javascript中的slice()方法

sqlite 日期时间类型学习1

javascript中slice(),splice(),split(),substring(),substr()使用方法