如何比较表中最后一个和第二个条目的值?

时间:2010-01-15 14:05:41

标签: sql oracle syntax

我在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 。我需要为每家公司提供物品。表格如下所示:

行情表:

日期 - 价值 - 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)。

1 个答案:

答案 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