在SQL中找到差异(最近的值-最近日期时间之前的值)

皮亚

对于下图给出的表t1,如何在sql中为每个UserID和ProductID对找到PurchaseAmount Diffenrece?

差=最新值-最近日期时间之前的值

这只是较大数据的一部分,PurchaseTime包含更多的UserID,ProductID对日期时间

在此处输入图片说明

最终结果将类似于以下内容:

在此处输入图片说明

MT0

您可以使用LEADROW_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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle SQL Group By,使用最近日期的值

来自分类Dev

SQL Server-查找最近日期的值

来自分类Dev

最近日期的sql顺序

来自分类Dev

我如何计算预定义日期时间和最近日期时间之间的秒数差异

来自分类Dev

将时间戳取整到Python中的最近日期

来自分类Dev

Oracle中的最近日期

来自分类Dev

PHP中的最近日期

来自分类Dev

我的 sql 按最近日期过滤

来自分类Dev

Data.table:加入ID和Date键,但要在第一个表中找到(或等于)日期键之前的最近日期

来自分类Dev

根据非空且早于行日期的最近日期向空行插入值

来自分类Dev

复制最近日期的行值,其中存在日期间隔

来自分类Dev

带有最近日期的条形图,其中日期是日期时间索引

来自分类Dev

从给定的浮点值中找到ArrayList中的最近位置

来自分类Dev

排序数组中的文件名,按创建的最近日期/时间降序

来自分类Dev

熊猫选择过去的最近日期

来自分类Dev

按组选择最近日期的行

来自分类Dev

熊猫在名称和最近日期合并

来自分类Dev

过滤器中的最近日期

来自分类Dev

查找组中的最近日期

来自分类Dev

交叉引用最近日期数据

来自分类Dev

多对多查询中的最近日期

来自分类Dev

按最近日期查询文档

来自分类Dev

SQL选择除最近日期以外的所有内容

来自分类Dev

基于最近日期的非主 ID 的 SQL 计数

来自分类Dev

从同一SQL表中的不同值中找到百分比差异?

来自分类Dev

最大最近值sql

来自分类Dev

PostgreSQL:删除除最近日期外的所有日期

来自分类Dev

返回特定日期Python / Pandas的最近日期

来自分类Dev

在python中找到最近的点