SQL 自上次下单以来的滞后天数

SQL LAG Days since last order

您好,我正在尝试在 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() 为每个 klantnrbesteldatum 对行进行排序,并且 return 使用派生的 table (子查询)的最新两个) 或 common table expression.

派生table版本:

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

common table expression版本:

;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 < n+1.