语句如下:
SELECT *
FROM
DatD D
WHERE
NOT EXISTS (SELECT 1 FROM DatD
WHERE CODE =D.CODE
and date > D.date)
功能为取得相同code下最新date的一条数据 ,我知道这条语句的功能,但怎么也看不明白是怎么实现的,还请高手指点
SELECT *
FROM
DatD D
WHERE
NOT EXISTS (SELECT 1 FROM DatD
WHERE CODE =D.CODE
and date > D.date)
功能为取得相同code下最新date的一条数据 ,我知道这条语句的功能,但怎么也看不明白是怎么实现的,还请高手指点
insert into @t select 'aaaa',2008-05-21
insert into @t select 'aaaa',2008-05-22
insert into @t select 'bbbb',2008-05-21
insert into @t select 'bbbb',2008-05-22
insert into @t select 'bbbb',2008-05-23
insert into @t select 'cccc',2008-05-21
insert into @t select 'dddd',2008-05-21
insert into @t select 'eeee',2008-05-21select *
from @t D
where
NOT EXISTS (SELECT CODE FROM @t
WHERE CODE =D.CODE
and dateq > D.dateq) select CODE,max(Dateq)
from @t
group by CODE
兄弟,你可以看看我写的这两条语句,结果是一样的,这就是说,上面的语句重写了group by。
他在内存当中是这样执行的:首先是一张表复制出一张表来 @t @tt,这两张表示一模一样的, 然后开始执行where条件,根据CODE相等,和Date取出一个最大的记录放在内存中,然后再根据select打印到界面上。不知道你明白了没有。
FROM
DatD D
WHERE D.date in
(SELECT max(date) FROM DatD
WHERE CODE =D.CODE
)
SELECT *
FROM
DatD D
WHERE
NOT EXISTS (SELECT 1 FROM DatD
WHERE CODE =D.CODE
and date > D.date)
就是选择表中 相同CODE 而日期是最大的记录就这么简单结贴吧
|--Table Scan(OBJECT:([ReportServerTempDB].[dbo].[DatD] AS [D]))
|--Table Scan(OBJECT:([ReportServerTempDB].[dbo].[DatD]))
执行计划