【问题标题】:Get nearest date column value from another table in SQL Server从 SQL Server 中的另一个表中获取最近的日期列值
【发布时间】:2020-12-30 12:13:02
【问题描述】:

我有两张桌子 A 和 B,

表 A

PstngDate   WorkingDayOutput
12/1/2020   221               
12/3/2020   327 
12/4/2020   509 
12/5/2020   418         
12/7/2020   390 
12/8/2020   431 
12/9/2020   244 
12/10/2020  246 
12/11/2020  314 
12/12/2020  301       
12/14/2020  411 
12/15/2020  530 
12/16/2020  554 
12/17/2020  300 
12/18/2020  375      
12/23/2020  402 
12/24/2020  302 
12/25/2020  269 
12/26/2020  382  
12/28/2020  608 

表 B

 PstngDate  HolidayOutput   isWorkingDay
  12/2/2020     20              0
  12/6/2020     24              0
  12/13/2020    31              0
  12/19/2020    82              0
  12/22/2020    507             0
  12/27/2020    537             0

预期输出:

PstngDate   WorkingDayOutput    HolidayOutput
12/1/2020   221                     20
12/3/2020   327 
12/4/2020   509 
12/5/2020   418                     24
12/7/2020   390 
12/8/2020   431 
12/9/2020   244 
12/10/2020  246 
12/11/2020  314 
12/12/2020  301                     31
12/14/2020  411 
12/15/2020  530 
12/16/2020  554 
12/17/2020  300 
12/18/2020  375                     589
12/23/2020  402 
12/24/2020  302 
12/25/2020  269 
12/26/2020  382                     537
12/28/2020  608 

我想用最近的较小日期列将 TableB 加入到 TableA。如果您看到 Expectedoutput 表,holidayoutput 列的第 18 天行是表 B 的第 19 天和第 22 天的总和。

【问题讨论】:

  • 您的数据有多大?性能是个问题吗?

标签: sql sql-server


【解决方案1】:

我想用最近的较小日期列将 TableB 加入到 TableA 中

这听起来像是横向连接:

select a.*, coalesce(b.holidayquantity, 0) as holidayquantity
from a
outer apply (
    select top (1) b.*
    from b
    where b.pstng_date >= a.pstng_date
    order by b.pstng_date
) b

【讨论】:

    【解决方案2】:

    你可以使用self left join如下:

    Select pstng_date, workingDayQuantity,
           HolidayQuantity,
           workingDayQuantity + HolidayQuantity as total
      From
    (Select a.*, b.HolidayQuantity,
            Row_number() over (partirion by a.psrng_date order by b.pstng_date) ad rn
      From tablea a join tableb b On b.pstng_date > a.pstng_date) t
    Where rn=1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 2015-12-27
      • 2022-11-22
      相关资源
      最近更新 更多