我在Oracle中有一个名为引号的表,有两列: date 和 value 。
我想比较表中最后一个条目和倒数第二个条目的值。
在这个例子中,我希望在一行中得到 13.1和11.1 的日期,以及每个日期的值之间的差异(10-5 = 5)。
行情表:
日期 - 价值
13.1.2010 - 10
11.1.2010 - 5
10.1.2010 - 2
8.10.2010 - 1
行情表:
日期 - 价值 - CompanyId
13.1.2010 - 10 - 10
11.1.2010 - 5 - 10
10.1.2010 - 2 - 10
8.10.2010 - 1 - 10
12.1.2010 - 7 - 20
10.1.2010 - 3 - 20
9.1.2010 - 2 - 20
8.10.2010 - 2 - 20
我想在这种情况下获得两行(但通常只获得与公司数量一样多的行) - 每个公司一个将返回两个日期和最新之间的差异价值和第二个最新价值。 所以在这种情况下它会返回:
companyId 10 13.1和11.1 and 5以及另一行如下:
companyId 20 12.1和10.1 and 4(7-3 = 4)。
答案 0 :(得分:3)
SELECT *, value - nextvalue AS diff
FROM (
SELECT m.*, LEAD(value) OVER (ORDER BY date DESC) AS nextvalue
FROM mytable m
ORDER BY
date DESC
)
WHERE rownum = 1
<强>更新强>
以公司方式选择结果:
SELECT value - nextvalue AS diff
FROM (
SELECT m.*,
LEAD(value) OVER (PARTITION BY companyId ORDER BY date DESC) AS nextvalue,
ROW_NUMBER() OVER (PARTITION BY companyId ORDER BY date DESC) AS rn
FROM mytable m
)
WHERE rn = 1