可以使用row_number()
通过besteldatum
每个klantnr
对行进行排序,并使用派生表(子查询)或common table expression返回最近2个。
派生表版本:
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。
你可以在这里粘贴你的查询而不是屏幕截图吗? – Mureinik
天以来的订单,直到*今天*或其他日期? –