2017-02-20 6 views
-2

Моя таблица имеет те же значения в двух столбцах. Я хотел бы обновить только одну строку, где в столбцах login и email указаны те же значения и 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

Один из способов заключается в использовании КТР, чтобы получить первые записи (на основе data modification) для каждого Login и Email комбинации:

;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

Смежные вопросы