您可以使用LEAD
和ROW_NUMBER
分析功能:
SELECT userid,
productid,
purchasetime,
DeltaPurchaseAmount
FROM (
SELECT userid,
productid,
purchasetime,
productamount
- LEAD( productamount, 1, 0 ) OVER (
PARTITION BY userid, productid
ORDER BY purchasetime DESC
)
AS DeltaPurchaseAmount,
ROW_NUMBER() OVER (
PARTITION BY userid, productid
ORDER BY purchasetime DESC
)
As rn
FROM table_name
)
WHERE rn = 1;
其中,对于Oracle中的示例数据:
CREATE TABLE table_name ( userid, productid, purchasetime, productamount ) AS
SELECT 1001, 901, DATE '2021-01-12', 100 FROM DUAL UNION ALL
SELECT 1001, 901, DATE '2021-01-11', 75 FROM DUAL UNION ALL
SELECT 1001, 905, DATE '2021-01-12', 150 FROM DUAL UNION ALL
SELECT 1001, 905, DATE '2021-01-11', 100 FROM DUAL UNION ALL
SELECT 1001, 999, DATE '2021-01-12', 100 FROM DUAL UNION ALL
SELECT 1002, 901, DATE '2021-01-12', 220 FROM DUAL UNION ALL
SELECT 1002, 905, DATE '2021-01-12', 215 FROM DUAL UNION ALL
SELECT 1002, 905, DATE '2021-01-11', 200 FROM DUAL UNION ALL
SELECT 1002, 999, DATE '2021-01-12', 250 FROM DUAL UNION ALL
SELECT 1002, 999, DATE '2021-01-11', 100 FROM DUAL;
(为了简化起见,使用了午夜的日期,但是在非午夜的时间仍然可以使用。)
给出:
USERID | PRODUCTID | 购买时间| DELTAPURCHASEAMOUNT -----:| --------:| :------------------ | ------------------: 1001 | 901 | 2021-01-12 00:00:00 | 25 1001 | 905 | 2021-01-12 00:00:00 | 50 1001 | 999 | 2021-01-12 00:00:00 | 100 1002 | 901 | 2021-01-12 00:00:00 | 220 1002 | 905 | 2021-01-12 00:00:00 | 15 1002 | 999 | 2021-01-12 00:00:00 | 150
db <>在这里拨弄
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句