我在Oracle中有一个名为quotes的表,有两列: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和5以及另一行如下:
companyId 20 12.1和10.1 and 4(7-3 = 4).
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
Run Code Online (Sandbox Code Playgroud)
更新:
要按公司选择结果:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1211 次 |
最近记录: |