sql查询生效日期
我想得到整个月购买饮料的报告,但饮料的价格可以在一个月内的任何时间变化,我想得到一个月价格变化的报告 我有两张桌子sql查询生效日期,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我想得到整个月购买饮料的报告,但饮料的价格可以在一个月内的任何时间变化,我想得到一个月价格变化的报告 我有两张桌子 SELECT [ID] ,[DrinkID] ,[UserID] ,[qty] ,[DateTaken] FROM [Snacks].[dbo].[DrinkHistory] SELECT [ID] ,[DrinkID] ,[UserID] ,[qty] ,[DateTaken
SELECT [ID]
,[DrinkID]
,[UserID]
,[qty]
,[DateTaken]
FROM [Snacks].[dbo].[DrinkHistory]
SELECT [ID]
,[DrinkID]
,[UserID]
,[qty]
,[DateTaken]
FROM [Snacks].[dbo].[DrinkHistory]
[DrinkHistory]:
[饮用价格效果]:
我希望得到2014年5月1日至2014年5月31日之间的结果
DrinkId Qty Price DateTaken PriceEffectiveDate
-----------------------------------------------------------------------
1 1 10 2014-05-10 2014-05-01
1 2 10 2014-05-15 2014-05-01
1 3 20 2014-05-20 2014-05-20
1 4 40 2014-05-30 2014-05-28
有没有人能给我一些想法或给我写一些疑问?如果你的饮料价格在一个月内随时可以改变,你可以为每次购买额外节省价格。我会在表[DrinkHistory]中添加一列[PricePaid] 在[DrinkHistory]中添加记录时,此时饮料的价格是已知的,但稍后可能会更改,因此您可以将当前价格保存到历史记录中 然后,对于您的结果,您可以只显示整个[DrinkHistory]
SELECT * FROM DrinkHistory;
这应该起作用:
Select
DH.DrinkId,
DH.Qty,
DPE.DrinkPrice AS Price,
DH.DateTaken,
DPE.PriceEffectiveDate
FROM DrinkHistory DH
JOIN DrinkPricesEffect DPE ON DPE.PriceID =
(
Select Top 1 PriceID FROM
(
Select PriceID,RANK() OVER(ORDER BY PriceEffectiveDate DESC ) AS rnk
FROM DrinkPricesEffect
WHERE DH.DrinkId = DrinkId AND
DH.DateTaken >= PriceEffectiveDate
)SubQ WHERE rnk = 1
)
WHERE DH.DateTaken Between '2014-05-01' AND '2014-05-30'
您可以在这里找到SQL Fiddle链接:到目前为止您得到了什么?这里有许多相关的问题……如果某个时间生效日期输入错误或需要编辑,那么在那个时候可能会产生问题,还有其他解决方案吗
SELECT * FROM DrinkHistory;
Select
DH.DrinkId,
DH.Qty,
DPE.DrinkPrice AS Price,
DH.DateTaken,
DPE.PriceEffectiveDate
FROM DrinkHistory DH
JOIN DrinkPricesEffect DPE ON DPE.PriceID =
(
Select Top 1 PriceID FROM
(
Select PriceID,RANK() OVER(ORDER BY PriceEffectiveDate DESC ) AS rnk
FROM DrinkPricesEffect
WHERE DH.DrinkId = DrinkId AND
DH.DateTaken >= PriceEffectiveDate
)SubQ WHERE rnk = 1
)
WHERE DH.DateTaken Between '2014-05-01' AND '2014-05-30'