【发布时间】:2017-06-04 17:14:52
【问题描述】:
我正在查询一个包含 4 年订单交易的表(pk = 订单号),并且我希望根据订单日期用特定日期标志标记每条记录 - 例如,日历年、日历月、财政年度等。我遇到了一些特定于我们业务的日期属性(例如,不容易通过 datepart 函数解决)。
我能够使用案例语句添加“学年”(对于我们来说,运行 8 月 1 日至 7 月 31 日):
case
when datepart(month, oline.order_date_ready) between 8 and 12 then datepart(year, oline.order_date_ready)
else (datepart(year, oline.order_date_ready)-1)
end as school_yr
因此对于 2017 年 1 月 19 日,上述内容将返回“2016”,因为对我们而言,2016 学年从 2016 年 8 月 1 日到 2017 年 7 月 31 日。
但现在我无法为称为“展期年”的事物重复相同类型的案例陈述。我们所有的订单历史记录表都会在每个日历年 7 月的第二个星期六重置/“展期”,例如最近的展期日期是 2016 年 7 月 9 日星期六。点击查看 - rollover year date ranges
我的上述案例陈述不再适用,因为我不能只添加“datepart(month, oline.order_date_ready) = 7” - 我不需要整个 7 月,我只需要发生的所有订单在那个七月的第二个星期六之后。所以在这个例子中,我需要从 2016 年 7 月 9 日星期六到今天发生的所有事情都被标记为 rollover_date = 2016。
是否有一种灵活的方法可以做到这一点,而无需将之前/未来的转存日期硬编码到另一个表中?这是我目前能想到的解决它的唯一方法,但我相信一定有更好的方法。
谢谢!
【问题讨论】:
标签: sql postgresql date calendar amazon-redshift