我有一个“跟踪”客户购物历程的数据库。如果他们的最终目的地或“商店”是特定值,我想要回忆起之前的价值。
例如,商店的名称如下:
Shop 1
Shop 2
Shop 3
Shop 4
如果我的选择查询返回商店4(对于任何客户),那么我希望额外的列显示他们上次购物的上一个商店。我的数据没有自然的顺序,因此我无法说明商店4 =商店3它只需要返回他们最后购物的商店,如果最后一个是商店4(之前的商店)可以是任何“商店”。
这是我到目前为止所做的,但它可能远远不够。我的表中有一个日期列,但不知道如何以这种方式使用它。
Select ...
case
when TableShop.ShopName LIKE 'Shop4' then
cast(TableShop.ShopName -1 AS nvarchar(50))
end
From ...
答案 0 :(得分:2)
据推测,您有一些列,用于指定访问顺序 - 例如visitDatetime
列。
然后,您可以使用ANSI标准LAG()
函数:
select s.*,
(case when s.shopName = 'Shop4'
then lag(s.shopName) over (partition by customerId order by visitDateTime)
end) as prev_ShopName
from tableshop s;