我在Oracle中有一张表叫做引号,有两列: date 和 value 。
我想比较表中最后一个条目和第二个最后一个条目的值。
在此示例中,我想一行获取 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)。
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