SQL - 查找前一个字符串值

时间:2016-11-30 12:32:21

标签: sql

我有一个“跟踪”客户购物历程的数据库。如果他们的最终目的地或“商店”是特定值,我想要回忆起之前的价值。

例如,商店的名称如下:

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 ...

1 个答案:

答案 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;