我在创建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
总而言之,我不知道从哪里开始可以有任何想法?
答案 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
相同 - 您可能希望删除其中一列。