一千萬個為什麽

搜索

在sql server 2000中查找最大行及其值

我有這張桌子

ID    Level    Value
 1     1        10
 1     2        20
 1     3        15
 1     4        18
 2     2        12
 2     1        20
 3     1        50
 3     2        80  

我想找到每個id的最大級別和這個最大行的值,結果:

ID    Level    Value
 1     4        18
 2     2        12
 3     2        80  

我不想使用嵌套的“選擇”因為我的表太大而嵌套選擇會減慢我的查詢速度 謝謝你的幫助

最佳答案

在SQL Server 2000中未經測試但假設 LevelValue 都是正整數,如下所示應該可以在不需要嵌套 SELECT 的情況下工作。

SELECT ID,
       MAX(Level) AS Level,
       Max(Level * Cast(10000000000 AS NUMERIC(38)) + Value) 
                                              % 10000000000 AS Value
FROM   T
GROUP  BY ID 

或者是處理負值的版本

SELECT ID,
       Max(Level) AS Level,
       Cast(Substring(Max(CASE
                            WHEN Level < 0 THEN 0x00
                            ELSE 0x01
                          END + Cast(Level AS BINARY(4)) + 
                                Cast(Value AS BINARY(4))), 6, 4) AS INT) AS Value
FROM   T
GROUP  BY ID 

轉載註明原文: 在sql server 2000中查找最大行及其值