我需要一个能够动态提取最近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中实现这一目标?
答案 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