1. 程式人生 > >Sql Server exists 查詢相同姓名或編號 年份最大的一條資料

Sql Server exists 查詢相同姓名或編號 年份最大的一條資料

select code,zw,zj,year from ZW a where not exists(select 1 from ZW where code=a.code and year>a.year)

對ZW表進行掃描,編號(或姓名)相同情況下,沒有比前邊年份大的資料存在,也就是取相同編號(或姓名)年份最大的一條資料。

論壇看到的一條關於類似語句的分析解釋:

select * from tt t where not exists(select 1 from tt where 姓名=t.姓名 and 薪資>t.薪資 ) 

對於表tt的記錄進行掃描,
對於其中任一條記錄,查詢相同表中相同姓名的記錄,查詢其中是否存在薪資>當前記錄的薪資的記錄,如存在,掃描到的記錄即不符合條件,


如不存在,即掃描到的記錄符合where的條件,將作為查詢結果.
考慮最簡單的情況
姓名,薪資
chen,1000    --此記錄與全部chen記錄1000-4000比較,2000以上>1000存在查詢結果,此記錄不符合where 條件
chen,2000    --此記錄與全部chen記錄1000-4000比較,3000以上>2000存在查詢結果,此記錄不符合where 條件
chen,3000    --此記錄與全部chen記錄1000-4000比較,4000>3000存在查詢結果,此記錄不符合where 條件
chen,4000    --此記錄與全部chen記錄1000-4000比較,沒有>4000的記錄,此記錄符合where 條件 
最後符合條件的記錄為
chen,4000
條件就是查詢相同姓名 沒有比查詢的記錄的薪資高的記錄

實際結果就是薪資的最大值.