SQL-查找先前的字符串值

SQL-查找先前的字符串值,sql,Sql,我有一个数据库“跟踪”客户的购物过程。我想做的是,如果他们的最终目的地或“商店”是一个特定的值,则调用以前的值 例如,假设商店的名称如下: Shop 1 Shop 2 Shop 3 Shop 4 如果我的select查询返回商店4(对于任何客户),那么我希望额外的列显示他们上次购物的前一家商店。我的数据没有自然的顺序,所以我不能确切地说4号店=3号店。如果最后一家是4号店,它只需要返回他们上次购物的任何一家店(以前的店可能是任何“店”) 到目前为止,这就是我所拥有的,但可能有点离题。我的表中有

我有一个数据库“跟踪”客户的购物过程。我想做的是,如果他们的最终目的地或“商店”是一个特定的值,则调用以前的值

例如,假设商店的名称如下:

Shop 1
Shop 2
Shop 3
Shop 4
如果我的select查询返回商店4(对于任何客户),那么我希望额外的列显示他们上次购物的前一家商店。我的数据没有自然的顺序,所以我不能确切地说4号店=3号店。如果最后一家是4号店,它只需要返回他们上次购物的任何一家店(以前的店可能是任何“店”)

到目前为止,这就是我所拥有的,但可能有点离题。我的表中有一个日期列,但不知道如何以这种方式使用它

Select ...
case
when TableShop.ShopName LIKE 'Shop4' then
cast(TableShop.ShopName -1 AS nvarchar(50))
end
From ...
您可能有一些列指定了访问的顺序——比如
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;

请用您正在使用的数据库标记您的问题。您想让我们猜测您的数据模型吗?您好,谢谢您的回答。请原谅我的无知,但我不知道你所说的“什么数据库”和“模型”是什么意思?如果有帮助的话,我正在使用SQL Server 2008。嗨,戈登-我刚刚发现SQL Server 2008中不存在LAG()。谢谢-很抱歉没有在我原来的帖子中说明这一点。@cheese\u和\u pickle。你应该用你正在使用的数据库标记你的问题。