问题描述
使用 HIVE sql,我目前有一个使用以下语句每周日运行的查询,
Select * from tableA
where date between date_add(current_date,-7) and date_Add(current_Date,-1)
如果发生某些事情并且此代码必须在星期一运行,我必须手动将日期添加到 -8 和 -2。有没有办法让它从上周日运行到上周六,这样我每次运行时都不必手动更改数字。
解决方法
上一个星期日是:next_day(date_sub(current_date,7),'SUN')
上一个星期六是:next_day(date_sub(current_date,'SAT')
我猜你需要在星期天之前(减去 -14)
Select * from tableA
where date between next_day(date_sub(current_date,14),'SUN')
and next_day(date_sub(current_date,'SAT')
如果在今天 (2021-04-28) 执行,它会给出 2021-04-18 (Sunday) 和 2021-04-24 (Sat)
如果在 2021-04-26(星期一)执行,它会给出相同的 2021-04-18(星期日)和 2021-04-24(星期六)
如果在本周的任何一天执行,除了最后一天星期六 (2021-05-01),这将起作用。如果在星期六执行,它将选择 2021-05-01 作为结束日期和 2021-04-18 作为开始日期。
如果您需要这也可以正常工作,如果在星期六 2021-05-01 也执行,
您可以将开始日期计算为 date_sub(next_day(date_sub(current_date,'SAT'),6)
(周六减 6)