SQL 窗口函数在订单级别查找每个客户的第二高订单日期
Posted
技术标签:
【中文标题】SQL 窗口函数在订单级别查找每个客户的第二高订单日期【英文标题】:SQL Window Function to find the second highest order date of each customer at the order level 【发布时间】:2021-03-15 20:18:45 【问题描述】:我有一个包含以下字段的表格:
| order_id | order_date | customer_id | second_highest_order_date_of_the_customer
| 12345 | 2020-11-01 | customer_ABC | 2020-05-01
| 67891 | 2020-05-01 | customer_ABC | 2020-02-01
| 00531 | 2020-02-01 | customer_ABC | 2020-01-01
| 00789 | 2020-01-01 | customer_ABC |
我发现很难在 SQL 中计算 second_highest_order_date_of_the_customer 列。 我可以使用窗口函数计算每个客户整体的第二高日期,但我很难在订单级别找到 second_highest_date,它不应该超过所述行中的 order_date。
非常感谢任何帮助
【问题讨论】:
【参考方案1】:nth_value()
窗口函数可以满足您的需求:
select t.*,
nth_value(order_date, 2) over (partition by customer_id order by order_date desc) as penultimate_order_date
from t;
如果英语不是您的第一语言,倒数第二个是一个漂亮的词,意思是“序列中倒数第二个”。
【讨论】:
感谢您的回复。我的数据库有重复的 order_ids 和 order_dates(购买的每件商品都有 1 个)。是否可以获得下一个最近的日期? 我正在尝试获取订单级别的第二个最近日期。在订单 ID 为 00531 的第 3 个条目的原始示例中,我需要计算列给我“2020-01-01”,因为这是 customer_ABC 当时订购的第二个最近日期。但是您的代码给了我 2020-02-01,这是该客户总体上第二个最近的购买日期。如果您需要任何其他信息,请告诉我。再次感谢您的帮助以上是关于SQL 窗口函数在订单级别查找每个客户的第二高订单日期的主要内容,如果未能解决你的问题,请参考以下文章