postgresql - sql中类别之间的间隔天数
问题描述
是否可以计算每个类别的第一次购买和第二次购买之间的差异?
例如,我在这里有数据集:
trx_id user_pin category date
1 "jak" "smartphone" "2018-01-01"
1 "jak" "groceries" "2018-01-01"
1 "jak" "health" "2018-01-01"
1 "jak" "virtual" "2018-01-01"
2 "mei" "groceries" "2018-01-01"
2 "mei" "virtual" "2018-01-01"
4 "jak" "smartphone" "2018-05-02"
8 "mei" "groceries" "2018-09-02"
8 "mei" "virtual" "2018-09-02"
我想知道购买和结果之间的差异日期,如下所示:
trx_id user_pin category date next_buy diff
1 "jak" "smartphone" "2018-01-01" "2018-05-02" 121
1 "jak" "groceries" "2018-01-01" "2018-05-02" 121
1 "jak" "health" "2018-01-01" "2018-05-02" 121
1 "jak" "virtual" "2018-01-01" "2018-05-02" 121
4 "jak" "smartphone" "2018-05-02" "null" null
2 "mei" "groceries" "2018-01-01" "2018-09-02" 244
2 "mei" "virtual" "2018-01-01" "2018-09-02" 244
5 "mei" "groceries" "2018-09-02" "null" null
5 "mei" "virtual" "2018-09-02" "null" null
查询情况如何?
解决方案
因此,假设 SQL Server 您可以使用 CTE 和外部应用执行类似的操作来获取下一条记录:
WITH mydataranked AS (
Select trx_id,user_pin, category, purchase_date,
DENSE_RANK() OVER (Partition by user_pin, category ORDER by purchase_Date asc) as myrank
from mydata
)
Select trx_id, user_pin, category, md.purchase_date, aa.purchase_date as next_buy, datediff(day, md.purchase_date, aa.purchase_date) as diff
from mydataranked md
outer apply
(Select purchase_date from mydataranked md2
where md.user_pin=md2.user_pin and md.category=md.category and md2.myrank=md.myrank+1) aa
推荐阅读
- javascript - 我怎么知道需要的模块?
- r - R:检测频率
- mysql - 如何使用 phpMyAdmin 中的“每组最大”查询修复错误?
- swift - SKTexture:加载图像资源时出错:“Tile_-4412407809”
- swift - 如何在 Swift 中的句子中获取特定关键字之前的单词?
- javascript - 给定一个 Map 如何按值排序以及值是否匹配按键 Javascript 排序?
- python - 如何在字典列表中拆分字典字符串值以添加新的字典项?
- google-chrome - 在 /userlicenses 上出现 500 后端错误
- hive - 向 hive 中的 case 语句添加子查询
- c# - 如何解决这个 for 循环正在冻结我的程序