我在oracle数据库中有一个如下表:
s_num eff_date amount
1 07-OCT-18 110
1 06-OCT-18 50
2 07-OCT-18 200
2 06-OCT-18 150
Run Code Online (Sandbox Code Playgroud)
我想找到今天和昨天的"金额"列之间的差异.结果必须如下
s_num diff
1 60
2 50
Run Code Online (Sandbox Code Playgroud)
我想这样做而不加入桌子本身.
你可以使用条件聚合
SELECT s_num,SUM (CASE
WHEN eff_date >= TRUNC(sysdate)
AND eff_date < TRUNC(sysdate) + 1 THEN amount --today
WHEN eff_date >= TRUNC(sysdate) - 1
AND eff_date < TRUNC(sysdate) THEN - amount --yesterday
END)
FROM t
GROUP BY s_num;
Run Code Online (Sandbox Code Playgroud)
或LAG功能
SELECT s_num,
diff
FROM (SELECT s_num,
eff_date,
amount - LAG(amount, 1, 0)
OVER (
partition BY s_num
ORDER BY eff_date ) AS diff
FROM t)
WHERE eff_date >= trunc(sysdate)
AND eff_date < trunc(sysdate) + 1 ;
Run Code Online (Sandbox Code Playgroud)
第一个将打印NULL除今天以外的天数差异,第二个不会返回其他日期的任何行.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |