2017-02-27 288 views
1

SQL中有通過依次檢查條件來選擇特定行的方法嗎?SQL查詢根據某些條件選擇一行

條件:選擇1 FC,分(狀態),MAX(版),MAX(CD),MAX(MD)

表數據:

FC Status Version CD MD 
1 999  23  20 13 
1 500  10  22 15 
1 400  23  19 11 
1 500  15  18 9 
1 400  19  17 12 
1 400  19  16 13 
1 400  23  17 30 

輸出應該是:

FC Status Version CD MD 
1 400  23  19 11 

回答

8

是的。使用TOPORDER BY

select top 1 t.* 
from t 
order by status asc, version desc, cd desc, md desc; 

如果你想這樣做,每FC,然後使用row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by fc 
           order by status asc, version desc, cd desc, md desc 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
0

使用GROUP BY子句:

SELECT FC,min(status),max(Version),max(CD),max(MD) 
FROM YOUR_table 
GROUP BY FC 
+0

如果你仔細看,你會看到,這不是什麼OP是要求。 「CD」列不是最大值。 –

2

SQL Server有方便with ties和允許Order by中的row_number()。所以

select top 1 with ties t.* 
from t 
order by row_number() 
     over (partition by fc order by status asc, version desc, cd desc, md desc) ;