Sql server 自上次订单起的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

您好,我正在尝试用SQL创建一个窗口查询,显示每个客户自上次订单以来的天数

它现在向我显示了每个订单之间的日期

我需要在查询中更改哪些内容,才能使其仅显示每个客户自上次和上次订单以来的天数?现在,它为客户的每一个订单显示它

查询:

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您可以将查询粘贴到这里而不是屏幕截图吗?从上次订单到今天的天数或其他日期?