SQL窗口函数,用于在订单级别查找每个客户的第二高订单日期
我有一个包含以下字段的表:SQL窗口函数,用于在订单级别查找每个客户的第二高订单日期,sql,datatable,aggregate-functions,window-functions,presto,Sql,Datatable,Aggregate Functions,Window Functions,Presto,我有一个包含以下字段的表: | 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 |
| 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中客户列的第二高订单日期。
我可以使用窗口函数计算每个客户的第二个最高日期,但我很难找到订单级别的第二个最高日期,该日期不应超过上述行中的订单日期
非常感谢您提供的任何帮助窗口功能满足您的需要:
select t.*,
nth_value(order_date, 2) over (partition by customer_id order by order_date desc) as penultimate_order_date
from t;
如果英语不是您的第一语言,倒数第二个是一个漂亮的单词,意思是“序列中倒数第二个”。窗口功能可以满足您的需要:
select t.*,
nth_value(order_date, 2) over (partition by customer_id order by order_date desc) as penultimate_order_date
from t;
如果英语不是你的第一语言,倒数第二个是一个漂亮的词,意思是“序列中倒数第二个”。谢谢你的回答。我的数据库有重复的订单ID和订单日期(每购买一件商品1个)。有可能得到下一个最近的日期吗?我正在尝试在订单级别获得第二个最近的日期。在订单ID为00531的第三个条目的原始示例中,我需要计算列提供“2020-01-01”,因为这是客户_ABC当时订购的第二个最新日期。但您的代码告诉我2020-02-01,这是该客户的第二个最新购买日期。如果您需要任何其他信息,请告诉我。再次感谢您的帮助谢谢您的回复。我的数据库有重复的订单ID和订单日期(每购买一件商品1个)。有可能得到下一个最近的日期吗?我正在尝试在订单级别获得第二个最近的日期。在订单ID为00531的第三个条目的原始示例中,我需要计算列提供“2020-01-01”,因为这是客户_ABC当时订购的第二个最新日期。但您的代码告诉我2020-02-01,这是该客户的第二个最新购买日期。如果您需要任何其他信息,请告诉我。再次感谢你的帮助