为了简单起见,我的问题类似于 THIS QUESTION, PART 2 ,唯一的问题是,我没有运行 Oracle,因此无法使用行号。
对于那些需要更多信息和示例的人:
我有一张 table
contractId date value 1 09/02/2011 A 1 13/02/2011 C 2 02/02/2011 D 2 08/02/2011 A 2 12/02/2011 C 3 22/01/2011 C 3 30/01/2011 B 3 12/02/2011 D 3 21/01/2011 A
编辑:为 ContractID 添加了另一行。因为我自己有一些代码,但是会显示以下内容:
contractId date value value_old 1 09/02/2011 A 2 08/02/2011 A D 3 30/01/2011 B C 3 30/01/2011 B A
但这不是我想要的!结果应该仍然如下!
现在我想选择给定日期之前的最后一条记录并将其与之前的值进行比较。 假设本例中的“给定日期”是 11/02/2011,输出应如下所示:
contractId date value value_old 1 09/02/2011 A 2 08/02/2011 A D 3 30/01/2011 B C
我确实有一个查询来选择给定日期之前的最后一条记录。这是最简单的部分。但是要选择之前的最后一条记录,我迷失了......
我真的希望我能在这里得到一些帮助,我已经为此绞尽脑汁好几天了,并在网络和 stackoverflow 上寻找答案。
最佳答案
一种可能性:
SELECT a.contractId, a.Date, a.Value, (SELECT Top 1 b.[Value]
FROM tbl b
WHERE b.[Date] < a.[Date] And b.ContractID=a.ContractID
ORDER BY b.[Date] Desc) AS Old_Value
FROM tbl AS a
WHERE a.Date IN
(SELECT TOP 1 b.Date
FROM tbl b
WHERE b.ContractID=a.ContractID
AND b.Date < #2011/02/11#
ORDER BY b.date DESC)
关于sql - 比较每个合约的最后记录和倒数第二个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5040818/