gpt4 book ai didi

PostgreSQL 窗口函数和日期之间的区别

转载 作者:行者123 更新时间:2023-11-29 14:34:41 25 4
gpt4 key购买 nike

假设我的数据格式如下(仅供引用,总行数超过 30K):

customer_id             order_date  order_rank
A 2017-02-19 1
A 2017-02-24 2
A 2017-03-31 3
A 2017-07-03 4
A 2017-08-10 5
B 2016-04-24 1
B 2016-04-30 2
C 2016-07-18 1
C 2016-09-01 2
C 2016-09-13 3

我需要第 4 列,我们称它为 days_since_last_order,在 order_rank = 1 then 0 else 的情况下计算自上一个订单(排名 n-1)以来的天数。

所以,上面的代码会返回:

customer_id             order_date  order_rank  days_since_last_order
A 2017-02-19 1 0
A 2017-02-24 2 5
A 2017-03-31 3 35
A 2017-07-03 4 94
A 2017-08-10 5 38
B 2016-04-24 1 0
B 2016-04-30 2 6
C 2016-07-18 1 79
C 2016-09-01 2 45
C 2016-09-13 3 12

是否有更简单的方法来使用窗口函数(或类似函数)计算上述内容,而不是将整个数据集与其自身相结合(例如,在 A.order_rank = B.order_rank - 1 上)并进行计算?

谢谢!

最佳答案

使用滞后窗函数

SELECT 
customer_id
, order_date
, order_rank
, COALESCE(
DATE(order_date)
- DATE(LAG(order_date) OVER (PARTITION BY customer_id ORDER BY order_date))
, 0)
FROM <table_name>

关于PostgreSQL 窗口函数和日期之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46943998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com