SQL 基于日期范围的输出

SQL output based on a date range

鉴于以下两个 table 场景,我将如何根据日期范围输出佣金百分比:

佣金百分比

 | User ID  | Start Date | End Date    | Percentage
 | -------- | ---------- | ----------- | ----------
 | 1        | 11/11/2014 | 11/30/2014  | 10%
 | 1        | 11/30/2014 |   NULL      | 20%
 | 2        | 10/10/2014 |   NULL      | 15%

销售额

 | User ID  | Sale Date  | 
 | -------- | ---------- | 
 | 1        | 11/24/2014 | 
 | 1        | 12/1/2014  | 
 | 2        | 12/30/2014 |

我想像这样结束两者之间的连接(结束日期字段中的空值表示存在 - 日期还将包含时间戳):

 | User ID  | Sales Date | Start Date | End Date    | Percentage
 | -------- | ---------- | ---------- | ----------  | ----------
 | 1        | 11/24/2014 | 11/11/2014 | 11/30/2014  | 10%
 | 1        | 12/1/2014  | 11/30/2014 |   NULL      | 20%
 | 2        | 12/30/2014 | 10/10/2014 |   NULL      | 15%

我正在使用 SQL Server 2012

谢谢

这样的事情可能对你有用,但是你需要根据你的系统工作方式来计算你的日期逻辑(即它应该大于还是大于 than/equal):

select S.UserID, S.SalesDate, C.StartDate, C.EndDate, C.Percentage
from Sales AS S
inner join Commission AS C
 on C.UserID = S.UserID
 AND S.SalesDate > C.StartDate
 AND S.SalesDate <= coalesce(C.EndDate, S.SalesDate)

我假设结束日期是根据数据百分比不适用的第一个日期。用户 ID 1 有矢量重叠。

SELECT s.User_ID,
    s.Sales_Date,
    cp.Start_Date,
    cp.End_Date,
    cp.Pecrcentage
FROM Commission_Percentages cp
INNER JOIN Sales s
    ON  s.User_ID = cp.User_ID
    AND s.Sale_Date >= cp.Start_Date
    AND (s.Sale_Date < cp.End_Date OR cp.End_Date IS NULL)