ms sql temporal table 在上次更改的列上查找历史记录

ms sql temporal table find history on column where last changed

我需要查询 tempal table 的历史记录 table,以查找上次更改列值的时间以及与现在的区别。由于 table 中还记录了其他更改,我只需要查找列数据更改的位置,然后找出更改的数量和时间

我的脾气史table是这样的

Id |Price |LastModifiedDate |其他数据
------ |----------------|----------------|--------
696733 |9995 |08/Nov/2016 09:30 |1 - 其他变化
696733 |9995 |06/Nov/2016 09:28 |2 -价格变化 -当前价格
696733 |10995 |30/Oct/2016 09:29 |2 - 其他变化 - 之前的价格
696733 |10995 |29/Oct/2016 09:29 |3 - 其他变化
696733 |10995 |26/Oct/2016 10:10 |4 - 其他变化
696733 |10995 |26/Oct/2016 08:42 |5 - 其他变化
696733 |10995 |25/Oct/2016 10:11 |6 -价格变动-
696733 |11595 |22/Oct/2016 09:50 |6 - 其他变化 - 旧旧价格
696733 |11595 |21/Oct/2016 15:26 |7 - 其他变化

所以我将 return 9995 作为当前价格,10995 作为之前的价格,更改日期为 06/Nov/2016 09:28 并忽略任何其他之前的价格更改.然后我需要过滤结果以检查更改是否是 28 天前说的,所以它需要是一个我可以放入子查询或交叉应用的解决方案

我一直在尝试使用 "OVER(order" 来避免使用丢失的嵌套查询

提前致谢

编辑

我的sqlfiddle示例http://sqlfiddle.com/#!6/05db1/7

注意 sql fiddle 不支持温度 tables 所以不得不模仿一下

您可以使用 OUTER APPLYORDER BY 来获取与当前价格不同的最新历史记录(假设当前价格在 Pricing table).

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