查找给定日期的有效时间段

时间:2017-11-16 12:40:05

标签: sql database

我的问题是使用两个SQL表查找给定日期的有效价格。 第一个表格列如下:

Item_ID | Date

,第二个是:

Item_ID | FromDate1 | Price1 | FromDate2 | Price2 | FromDate3 | Price3 | FromDate4 | Price4 | EndDate

我想编写Query,其结果如下:

Item_ID | Date | Valid_Price

正如您可能猜到的,Valid_Price取决于日期。 E.g。

  

如果first.FromDate(x)< second.Date< first.FromDate(X + 1)

     

result.Valid_Price = first.Price(x)

当然,两个表中的Item_ID必须相同,但我知道我可以用WHERE或ON来做。您有任何想法如何在SQL查询中包含上述条件吗?

P.S。有时只填充几列。例如。可能只有FromDate1,Price1,EndDate,其余值都是NULL。

2 个答案:

答案 0 :(得分:0)

我认为这不是关于查询的最佳解决方案,但这可能是有用的:

  SELECT Item_ID, first.date,
         CASE WHEN first.date <= FromDate1 THEN Price1
              WHEN first.date <= FromDate2 THEN Price2
              WHEN first.date <= FromDate3 THEN Price3
              WHEN first.date <= FromDate4 THEN Price4
         ELSE 0
         END AS price
    FROM first JOIN second USING (Item_ID);

希望这有帮助。但不确定要理解你的“first.FromDate(x + 1)”

答案 1 :(得分:0)

案例陈述非常有帮助。这段代码最终看起来像:

     CASE WHEN first.[Date] >= FromDate6 THEN Price6
          WHEN first.[Date] >= FromDate5 THEN Price5
          WHEN first.[Date] >= FromDate4 THEN Price4
          WHEN first.[Date] >= FromDate3 THEN Price3
          WHEN first.[Date] >= FromDate2 THEN Price2
          WHEN first.[Date] >= FromDate1 THEN Price1  
          ELSE NULL
     END AS price

(...)

ON FIRST.[Date] <= EndDate