2017-02-20 124 views
-2

我的表在兩列中具有相同的值。我只想更新loginemail列中相同的值,並且data modification更早。因此,在下面的示例中,它只能更新ID = 2。我應該使用什麼SQL語句?更新MSSQL中兩列中具有相同值的行

ID | login |email    |data modification 
---|---------|---------------------|----------------- 
1 | abc  |[email protected]  | 2017-01-10 
2 | abc  |[email protected]  | 2017-02-14 
3 | example |[email protected] | 2017-02-17 
+0

您的查詢是在哪裏?你希望我們爲你寫嗎? –

+0

@Wim Ombelets我要求查詢,所以我不知道我可以把... – Luki

回答

4

的一種方法是使用一個CTE來獲取第一條記錄(根據data modification)每個LoginEmail組合:

;WITH CTE AS 
(
    SELECT Id, 
      ROW_NUMBER() OVER(PARTITION BY Login, Email ORDER BY [data modification]) as rn 
    FROM <Table> 
) 

UPDATE t 
SET <column> = <value> 
FROM <Table> t 
INNER JOIN CTE ON t.Id = CTE.Id 
WHERE rn = 1 

如果您是在2012或更高版本,可以工作寫更短,使用First_Value

;WITH CTE AS 
(
    SELECT FIRST_VALUE(Id) OVER(PARTITION BY Login, Email ORDER BY [data modification]) as FirstId 
    FROM <Table> 
) 

UPDATE t 
SET <column> = <value> 
FROM <Table> t 
INNER JOIN CTE ON t.Id = CTE.Id 
+0

我給了我的+1,但CTE並不是真的需要,你可以使窗口函數查詢的嵌套查詢 –

+1

@ThomasG這是正確的,但是一旦我習慣了與CTE合作,派生表似乎對我來說就不那麼可讀了。 –

+0

@Zohar Peled非常感謝,它正在工作。 – Luki

相關問題