2014-09-08 2 views
1

У меня есть таблица с 4-мя колоннамиSql Вложенный запрос с MAX

Для каждого идентификатора на Col2 и для каждого значения = с на Col1, мне нужно обновить столбец DataNew с самой последней датой (из столбца данных) найден на записи, которая имеет тот же идентификатор и значение a или b на Col1

Ниже приведен пример с DataNew после обновления.

Col1|Col2|Data  |DataNew 
----|----|----------|----------- 
a |x |12/05/2013| 
b |x |12/04/2013| 
c |x |12/09/2013|12/04/2013 
b |x |12/08/2013| 
a |f |12/06/2014| 
b |f |12/04/2014| 
c |f |12/09/2014|12/06/2014 
d |f |12/08/2014| 

(12/05/2013 = пятые на декабрь)

UPDATE TAT_Test 
SET DataNew = 
(select top 1 MAX(Data) 
from TAT_Test 
where Col1 IN ('a','b') 
) 
where Col1 IN ('c') 

Это моя попытка, но не знаю, как показать внутри вложенного запроса, который я ищу COL1 = текущей записи

Спасибо!

+1

Какая СУБД вы используете? Postgres? Oracle? –

+0

Sql Server. Должен был сказать это раньше. Спасибо – user3652812

+1

Почему Datenew 12/04/2013, а не 12/08/2013 для Col2 = x? Если в вашей выборке нет ошибки, результат не имеет смысла imo. – jpw

ответ

0

Если таблица данных была названа "Тампе", попробуйте следующее:

update tbl 
inner join (
    select max(data) as "new", col2 from tbl where col1 in ('a','b') group by col2 
) as upd on (upd.col2=tbl.col2) 
set tbl.DataNew=upd.new where tbl.col1='c'; 
0

Я думаю, что это может быть то, что вы хотите:

UPDATE TAT_Test 
SET DataNew = 
    (SELECT MAX(Data) 
    FROM TAT_Test WHERE Col1 IN ('a','b') AND Col2 = t.Col2) 
FROM TAT_Test t 
WHERE t.Col1 = 'c' 

Это дает следующий результат:

Col1 Col2 Data     DataNew 
---- ---- ----------------------- ---------- 
a x 2013-12-05 01:00:00.000 NULL 
b x 2013-12-04 01:00:00.000 NULL 
c x 2013-12-09 01:00:00.000 2013-12-08 -- << this is not the row in 
b x 2013-12-08 01:00:00.000 NULL   -- your sample, but it is 
a f 2014-12-06 01:00:00.000 NULL   -- the latest for the Col2 id 
b f 2014-12-04 01:00:00.000 NULL 
c f 2014-12-09 01:00:00.000 2014-12-06 
d f 2014-12-08 01:00:00.000 NULL 
Смежные вопросы