我需要查询时态表的历史表,以查找列值更改的最后时间以及与现在相比的差异。由于还有其他更改也记录在表中,我只需要找到更改列数据的位置,然后找出更改的数量和更改时间
我的时间历史表看起来像这样
Id |Price |LastModifiedDate |other data ------ |---------------|------------------|-------- 696733 |9995 |08/Nov/2016 09:30 |1 -other change 696733 |9995 |06/Nov/2016 09:28 |2 -price change -current price 696733 |10995 |30/Oct/2016 09:29 |2 -other change - prev price 696733 |10995 |29/Oct/2016 09:29 |3 -other change 696733 |10995 |26/Oct/2016 10:10 |4 -other change 696733 |10995 |26/Oct/2016 08:42 |5 -other change 696733 |10995 |25/Oct/2016 10:11 |6 -price change - 696733 |11595 |22/Oct/2016 09:50 |6 -other change - old old price 696733 |11595 |21/Oct/2016 15:26 |7 -other change
因此,我们希望将9995作为当前价格返回,将10995作为之前的价格和更改日期返回06 / Nov / 2016 09:28并忽略之前的任何其他价格变化。然后,我需要对结果进行过滤以检查更改是否在28天前说出来,所以它需要是我可以放入子查询或交叉应用的解决方案
我一直在尝试使用" OVER(订单"以避免使用丢失的嵌套查询
提前致谢
修改
我的sql小提琴示例http://sqlfiddle.com/#!6/05db1/7
注意sql小提琴不支持时态表,所以不得不模仿它答案 0 :(得分:1)
您可以使用OUTER APPLY
和ORDER BY
来获取与当前价格不同的最新历史记录(假设当前价格在Pricing
表中)
SELECT
p.Id,
p.Price AS current_price,
ph.Price AS prev_price,
ph.LastModifiedDate AS prev_price_date
FROM [Pricing] p
OUTER APPLY (
SELECT TOP 1 ph1.Price, ph1.LastModifiedDate
FROM [PriceHistory] ph1
WHERE ph1.Id = p.Id
AND ph1.Price <> p.Price
ORDER BY ph1.LastModifiedDate DESC
) AS ph