我有一份使用这些日期参数的周报:
SELECT *
FROM TABLE
WHERE DATE_FIELD BETWEEN (CURRENT DATE - 8 DAYS) AND (CURRENT DATE - 2 DAYS)
它在周一运行以收集前一周的数据(sun-sat)。我现在要做的是在上一年的同一周运行这个。
例如,如果上面的代码在20年6月29日星期一运行,它将返回20年6月21日星期一到20年6月27日星期六的数据,即2020年的第26周。我希望它能返回19年6月23日至19年6月29日(即2019年第26周)的数据。
报告会自动运行,所以我不能每次都插入确切的日期。我也不能仅仅将日期参数抵消到-357和-367天,因为这会被闰年所抵消。
我一直在寻找解决方案,但它们似乎都依赖于dateadd函数,我的db2数据库无法识别该函数。
有人知道我要怎样才能得到我想要的结果吗?任何建议都将不胜感激!:)
3条答案
按热度按时间cnjp1d6j1#
最简单的方法是建立一个日历或日期表…(谷歌)
sql calendar table
)你会发现
日期
年
月
一刻钟
星期一
开始每周
周末
周\n
加载表时可以使用week()或week\ iso()函数,注意差异并选择最适合自己的。
这样的日历表使比较当前期间和以前期间变得容易。
g9icjywg2#
如果假设所有年份都有52周,则可以使用日期算术:
因为你希望一周从星期一开始,所以不必考虑闰年。它正好减去52周——闰年对周没有影响。
如果你要面对52或53周的年头,这会变得更复杂。
qcuzuvrc3#
有点复杂,但应该有用。你可以按原样运行或者测试你自己的日期。
中间柱
YEAR_1ST_WEEK_END
值是给定日期上一年的第一个星期六(周末)。WEEKS_TO_ADD
是要添加到YEAR_1ST_WEEK_END
日期。