小编典典

如何比较表中倒数第二个条目的值?

sql

我在Oracle中有一张表叫做引号,有两列: datevalue

我想比较表中最后一个条目和第二个最后一个条目的值。

在此示例中,我想一行获取 13.1和11.1的 日期, 以及 每个日期的值之间的差(10-5 = 5)。


报价表:

日期-值

2010年1月13日-10

11.1.2010-5

2010年1月10日-2

2010年10月8日-1


编辑:

我想拥有一个更复杂的表,其中包含更多列 companyId 。我需要为每个公司获取物品。表将如下所示:

报价表:

日期-值-公司编号

2010年1月13日-10-10

11.1.2010-5-10

10.1.2010-2-10

2010年10月8日-1-10

2010年1月12日-7日至20日

10.1.2010-3-20

9.1.2010-2-20

2010年10月8日-2-20

在这种情况下,我想获得两行( 但总的来说,与公司数量一样多
)-每家公司都将返回一行,并返回日期和最新值与第二新值之间的差额。因此,在这种情况下,它将返回:

companyId 10 13.1和11.1和5以及另一行,如下所示:

companyId 20 12.1和10.1和4(7-3 = 4)。


阅读 237

收藏
2021-04-22

共1个答案

小编典典

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
2021-04-22