2016-11-30 55 views
1

我有一個「跟蹤」客戶購物行程的數據庫。如果他們的最終目的地或「商店」是特定的價值,我想要做的是回想以前的價值。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

你想讓我們猜猜你的數據模型嗎? – arturro

+0

大家好,謝謝你的回覆。請原諒我的無知,但我不知道'數據庫'和'模型'是什麼意思? 如果有幫助,我正在使用SQL Server 2008。 –

回答

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; 
+0

嗨戈登 - 我剛剛發現,在SQL Server 2008中不存在LAG()。謝謝 - 對不起,沒有在我原來的帖子中說明這一點。 –

+0

@cheese_and_pickle。 。 。你應該用你正在使用的數據庫標記你的問題。 –