使用MAX的Sql嵌套查询

时间:2014-09-08 14:26:54

标签: sql sql-server tsql

我有一个包含4列的表

对于Col2上的每个id和Col1上的每个值= c,我需要使用具有相同ID且值为a和b的记录上的最新日期(来自列数据)更新Column DataNew在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|

(2013年12月12日= 12月5日)

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

这是我的尝试但不确定如何在嵌套查询中显示我正在寻找Col1 =当前记录

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您的数据表已命名为" tbl"然后试试这个:

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';  

答案 1 :(得分: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