如何获得最大日期记录与前一天之间以及最大日期记录与日期前7天之间的大小差异(使用Oracle SQL)。
Date Size
----- ------
26-Aug-19 20
25-Aug-19 10
24-Aug-19 30
23-Aug-19 40
22-Aug-19 14
21-Aug-19 16
20-Aug-19 19
19-Aug-19 21
我能够在解码中使用SYSDATE。但是无法解决在解码语句中使用GREATEST(Date)的问题。必须获取最新日期,然后执行Latestdate-1和LatestDate-7,然后找出差异。
所需结果:
Date Diff Size 1d Diff Size 1w
----- ------------- ------------
26-Aug-19 10 -1
答案 0 :(得分:1)
您可以在每天只有一行的情况下尝试
SELECT DATE, DIFF_SIZE_ID, DIFF_SIZE_1W FROM
(SELECT DATE,
SIZE - LAG(SIZE,1) OVER (ORDER BY DATE) AS DIFF_SIZE_ID,
SIZE - LAG(SIZE,7) OVER (ORDER BY DATE) AS DIFF_SIZE_1W,
ROW_NUMBER() OVER (ORDER BY DATE DESC NULLS LAST) AS RN
FROM TABLE)
WHERE RN = 1;
干杯!
答案 1 :(得分:1)
您可以考虑使用max("Date") over (order by "Date" desc)
与first_value("Size") over ( order by "Date" desc ) - "Size"
列进行比较来检测"Date"
的最大日期和非空值:
select max(max_date) as "Date",
max(day_before) as "Diff Size 1d",
max(week_before) as "Diff Size 1w"
from
(
select max("Date") over (order by "Date" desc) max_date,
case when max("Date") over (order by "Date" desc) - 1 = "Date" then
first_value("Size") over ( order by "Date" desc ) - "Size"
end day_before,
case when max("Date") over (order by "Date" desc) - 7 = "Date" then
first_value("Size") over ( order by "Date" desc ) - "Size"
end week_before
from tab);
Date Diff Size 1d Diff Size 1w
--------- ------------ ------------
26-AUG-19 10 -1
P.S。如果您有日期为max("Date") - 1
或max("Date") - 7