求助:每日SQL查询中自动变更日期筛选条件的实现方法
自动更新筛选条件中的日期部分解决方案
嘿,这事儿不难搞定!核心思路就是用SQL里的「当前日期函数」代替硬编码的日期,再拼接上你固定的15:00:00时间,这样每天运行查询时,日期部分会自动匹配当天(或者你需要的相对日期)。
我根据常见的SQL引擎给你分情况说明:
情况1:如果你用的是BigQuery(从你的表命名风格看大概率是这个)
BigQuery里用CURRENT_DATE()获取当前日期,然后拼接成完整的时间戳,替换原来的硬编码日期:
-- 筛选条件改成这样 date_add(a.Order_date,4,"Hour") > TIMESTAMP(CONCAT(CURRENT_DATE(), ' 15:00:00'))
或者用更简洁的写法,直接组合日期和时间:
date_add(a.Order_date,4,"Hour") > DATETIME(CURRENT_DATE(), TIME(15,0,0))
把你的完整查询修改后就是这样(我补全了你省略的关联部分,记得根据实际情况调整关联条件):
SELECT a.order as Order_Number, unique(b.status_name) as Status, date_add(a.Order_date,4,"Hour") as Ordered_Date, date_add(a.Export_date,4,"Hour") as Exported_Date, date_add(a.Dispatch_date,4,"Hour") as Dispatched_Date FROM [ops_views.Order_Timeline] as a LEFT JOIN [ops_views.sales_order_items] as b ON a.order = b.order -- 这里的关联条件请根据你的实际表结构调整 WHERE date_add(a.Order_date,4,"Hour") > TIMESTAMP(CONCAT(CURRENT_DATE(), ' 15:00:00'))
情况2:如果你用的是MySQL
MySQL用CURDATE()获取当前日期,拼接成字符串后直接作为筛选值:
-- 筛选条件 DATE_ADD(a.Order_date, INTERVAL 4 HOUR) > CONCAT(CURDATE(), ' 15:00:00')
情况3:如果你用的是PostgreSQL
PostgreSQL里直接用CURRENT_DATE加上固定时间即可:
-- 筛选条件 a.Order_date + INTERVAL '4 hours' > CURRENT_DATE + TIME '15:00:00'
额外提示:如果需要筛选「前一天15点之后」的数据
很多时候每日运行查询是要统计前一天的内容,这时候只要给日期函数减1天就行。比如BigQuery里改成:
date_add(a.Order_date,4,"Hour") > TIMESTAMP(CONCAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY), ' 15:00:00'))
内容的提问来源于stack exchange,提问作者Shubh Gurung
相关产品推荐
相关产品推荐

