SQL查询将给出给定客户端的订单之间的天数差异

时间:2016-02-20 14:43:46

标签: sql

我在创建SQL查询时遇到问题,该问题会让我在客户提供的订单之间的天数不同

id  date       order_no   client_id
1   2016-02-01    1         1
2   2016-02-02    2         2
3   2016-02-03    3         1
4   2016-02-04    4         2
5   2016-02-10    5         1

总而言之,我不知道从哪里开始可以有任何想法?

2 个答案:

答案 0 :(得分:0)

ANSI SQL具有LAG()功能,它可以完全满足您的需求。因此,以下内容为您提供上一个日期:

SELECT t.*,
       LAG(date) OVER (PARTITION BY client_id ORDER BY date) as prev_date
FROM t;

您可以使用适合您的数据库的任何函数减去这些值(通常简单的减法工作,但在某些数据库中需要特殊功能)。

在不支持此功能的数据库中,相关子查询可以执行相同的操作。

答案 1 :(得分:0)

您没有指定DBMS,因此这是ANSI SQL:

select client_id, 
       "date" as order_date, 
       order_no,
       lag(date) over (partition by client_id order by "date") - "date" as days_since_last_order
from orders
order by client_id, date, order_no;

DATE是SQL中的关键字,因此需要引用它。它不是列名的好选择。

order_no似乎与id相同 - 您可能希望删除其中一列。