Oracle SQL - 过去12个月的数据

时间:2016-09-30 14:58:04

标签: oracle date

我需要一个能够动态提取最近12个月的发货数据(不包括当月)的查询。因此,今天是2016年9月30日,我需要从2015年9月1日到2016年8月31日的数据。明天,查询将更改为10-1-15到9-30-16的日期范围。

以下是我目前的情况:

WHERE (shipdate BETWEEN TRUNC(sysdate, 'Year') AND sysdate)

此查询会将日历年开始的数据提取到今天的日期,而不是之前的12个已完成的月份。我已经找到了MySQL和MS SQL Server的答案,但没有找到Oracle的答案。如何在Oracle中实现这一目标?

2 个答案:

答案 0 :(得分:3)

between add_months(trunc(sysdate, 'month'), -12) and trunc(sysdate, 'month')

如果货物实际上可以在午夜时间加上时间戳,并且不应包含时间戳为9月1日00:00:00的货件,则“之间”应更改为

shipdate >= add_months(trunc(sysdate, 'month'), - 12) 
                               and shipdate < trunc(sysdate, 'month')

答案 1 :(得分:0)

假设您有一个包含日期列表的表格,例如过去1000天:

create table tableTest(shipDate) as
(
    select trunc(sysdate) - level +1
    from dual
    connect by level < 1000
)

您可以使用以下内容:

select min(shipdate), max(shipdate)
from tableTest
where shipDate between trunc(add_months(sysdate, -12), 'MONTH') and TRUNC(sysdate, 'MONTH') -1