【问题标题】:Oracle - Get data from past year (Dynamic)Oracle - 获取过去一年的数据(动态)
【发布时间】:2018-03-29 01:53:31
【问题描述】:

我有一些关于从数据库中获取数据的问题,这些数据需要从过去一年中获取(动态,非硬编码)

表:BookingTable

bookingID   userID     Timebooked 
1             0003    10-May-2016
2             0001    10-May-2018
3             0001    10-Apr-2017
4             0001    10-Apr-2017
5             0003    10-Jan-2011
6             0006    10-Apr-2018
7             0003    10-Apr-2016
8             0006    10-Apr-2015
9             0001    10-Apr-2017

这是我下面的代码

SELECT userID, COUNT(userID) AS count
FROM BookingTable 
GROUP BY userID
HAVING COUNT(userID) >2

这是我上面查询的结果

userID  count
0001      4
0003      3

我想从表格中添加从过去一年到当前日期的时间安排。

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以使用sysdate - interval '1' year 表示一年前的今天:

    SELECT userID, COUNT(userID) AS count
    FROM BookingTable 
    WHERE Timebooked BETWEEN SYSDATE - INTERVAL '1' year AND SYSDATE
    GROUP BY userID
    HAVING COUNT(userID) > 2
    

    正如@Wernfried 在下面正确指出的那样,上述方法将在闰年的 2 月 29 日失败。相反,请使用以下解决方法:

    WHERE Timebooked BETWEEN ADD_MONTHS(SYSDATE, -12) AND SYSDATE
    

    【讨论】:

    • 你好时间,添加“WHERE Timebooked >= SYSDATE - INTERVAL '1' year”后会出现(NOT A GROUP BY 表达式)
    • Timebooked 是日期列吗?是什么类型的?
    • 日期数据类型不为空
    • 感谢@Tim Biegeleisen 的帮助,我刚刚意识到我缺少一些表情,一切都解决了!感谢您的帮助
    • - INTERVAL '1' year 将在 2 月 29 日失败。考虑使用add_months(SYSDATE, -12)
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多