SQL合并在源上使用日期范围

时间:2019-06-18 20:18:32

标签: sql azure-sql-database sql-merge

我正在尝试创建一个查询,该查询将仅合并未来3天发生的旅行。该查询将在每晚Microsoft流量上运行,以填充公司应用程序。 Db在Azure SQL上运行,[旅行日期]数据类型为datetime2。

我没有运气尝试过between getdate() and getdate() + 3,所有记录已合并。感谢您的帮助。

merge TblAppTrips as target
using TblTrips as source on (target.TripID = source.TripID)

When matched then
    update 
        set TripId = source.TripID, 
            cost = source.cost, 
            [Trip Date] = source.[Trip Date]  

when not matched then
    insert ([TripID], [cost], [Trip Date])
    values (source.[TripID], source.[cost], source.[Trip Date]);

1 个答案:

答案 0 :(得分:0)

尝试一下-您可能需要稍微练习一下数字,但这应该为您指明正确的方向。基本上,在尝试更新时,您基本上需要将目标窗口限制为接下来的三天。插入内容只会增加未来3天发生的新行程。

merge TblAppTrips as target
using TblTrips as source on (target.TripID = source.TripID)

When matched and datediff(day, getdate(), target.[Trip Date]) between 0 and 3
then
  update 
    set TripId = source.TripID, 
        cost = source.cost, 
        [Trip Date] = source.[Trip Date]  

when not matched and datediff(day, getdate(), source.[Trip Date]) between 0 and 3 
then
  insert ([TripID], [cost], [Trip Date])
  values (source.[TripID], source.[cost], source.[Trip Date]);