Sql server 自上次订单起的SQL延迟天数
您好,我正在尝试用SQL创建一个窗口查询,显示每个客户自上次订单以来的天数 它现在向我显示了每个订单之间的日期 我需要在查询中更改哪些内容,才能使其仅显示每个客户自上次和上次订单以来的天数?现在,它为客户的每一个订单显示它 查询:Sql server 自上次订单起的SQL延迟天数,sql-server,tsql,lag,Sql Server,Tsql,Lag,您好,我正在尝试用SQL创建一个窗口查询,显示每个客户自上次订单以来的天数 它现在向我显示了每个订单之间的日期 我需要在查询中更改哪些内容,才能使其仅显示每个客户自上次和上次订单以来的天数?现在,它为客户的每一个订单显示它 查询: SELECT klantnr,besteldatum, DATEDIFF(DAY,LAG(besteldatum) OVER(PARTITION BY klantnr ORDER BY besteldatum),besteldatum) AS DaysS
SELECT klantnr,besteldatum,
DATEDIFF(DAY,LAG(besteldatum) OVER(PARTITION BY klantnr ORDER BY besteldatum),besteldatum) AS DaysSinceLastOrder
FROM bestelling
GROUP BY klantnr,besteldatum;
您可以使用
row_number()
按besteldatum
对每个klantnr
的行进行排序,并使用派生表(子查询)或返回最新的两行
派生表版本:
select klantnr, besteldatum, DaysSinceLastOrder
from (
select klantnr, besteldatum
, DaysSinceLastOrder = datediff(day,lag(besteldatum) over (partition by klantnr order by besteldatum),besteldatum)
, rn = row_number() over (partition by klantnr order by besteldatum desc)
from bestelling
group by klantnr, besteldatum
) t
where rn = 1
版本:
;with cte as (
select klantnr, besteldatum
, DaysSinceLastOrder = datediff(day,lag(besteldatum) over (partition by klantnr order by besteldatum),besteldatum)
, rn = row_number() over (partition by klantnr order by besteldatum desc)
from bestelling
group by klantnr, besteldatum
)
select klantnr, besteldatum, DaysSinceLastOrder
from cte
where rn = 1
如果您希望每个客户一行,
rn=1
是合适的过滤器。如果您想要n
最新的行数,请使用rn您可以将查询粘贴到这里而不是屏幕截图吗?从上次订单到今天的天数或其他日期?