我有兩列這樣的:如何比較在同一列中重複的值?
ChannelURI UserId
1020 1
1040 2
1060 3
1020 5
1090 4
1020 5
現在我要檢查是否有任何以前行的條目有最後一行的最後一個值,如果是這樣,它具有相同的用戶ID,然後跳過,如果發現(匹配),並用不同的用戶id,然後在這種情況下user ID =1
插入空在ChannelUri
應該有channeluri
設置爲null
任何想法如何實現這一目標?
我有兩列這樣的:如何比較在同一列中重複的值?
ChannelURI UserId
1020 1
1040 2
1060 3
1020 5
1090 4
1020 5
現在我要檢查是否有任何以前行的條目有最後一行的最後一個值,如果是這樣,它具有相同的用戶ID,然後跳過,如果發現(匹配),並用不同的用戶id,然後在這種情況下user ID =1
插入空在ChannelUri
應該有channeluri
設置爲null
任何想法如何實現這一目標?
SQL認爲數據是一組無序。除非您指定ORDER BY,否則行可合法地以任何順序返回。
除非你也有另一場(S),你可以通過訂購您的數據,「之前的紀錄」實際上可能是任何東西。
您可以只是選擇所有的數據,並解析它在PHP或.Net,對不對? 沒有。
僅僅因爲數據通常回來以相同的順序,這是從來沒有保證。更改數據,上盤,索引,並行數據等諸多因素的破碎意味着數據可以在任何時間以不同的順序返回。
如果你的邏輯是依賴於數據的順序,你必須指定 ORDER BY子句等,通過暗示,必須在數據字段,使您可以訂購。
對不起。
假設你有一列'Sort'
,你可以使用命令你行的,下面的語句會做的伎倆:
UPDATE m
SET ChannelURI = NULL
FROM mytable m
JOIN mytable m2
ON m.ChannelURI = m2.ChannelURI
AND m.UserId != m2.UserId
AND m2.Sort = (SELECT MAX(sort) FROM mytable)
基本上,這採用了相同的想法@erikxiv's answer,但使用SELECT TOP (1)
來檢索最後一排,而不是過濾功能MAX(sort)
:
UPDATE m
SET ChannelURI = NULL
FROM mytable m
JOIN (
SELECT TOP (1) ChannelURI, UserId
FROM mytable
ORDER BY sort DESC
) last
ON m.ChannelURI = last.ChannelURI
AND m.UserId != last.UserId
你說的「以前」和「最後」是什麼意思?這些詞假定你有一個訂單。你訂購了哪一列? –
當你說「在ChannelUri插入空」你的意思是在查詢返回的值,或真正地改變數據在表中的答案有一個(合理的)假設? – hatchet