基于日期范围的SQL输出

时间:2015-01-09 13:57:04

标签: sql sql-server

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

佣金百分比

 | 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

由于

2 个答案:

答案 0 :(得分:0)

这样的事情可能适合你,但是你需要根据系统的工作方式来计算日期逻辑(即它是否应该大于或等于/等于):

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)

答案 1 :(得分:0)

我假设结束日期是根据数据不适用百分比的第一个日期。用户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)