2011-12-23 70 views
1

我用這個查詢下面讓已添加如何包含另一列而不必將其置於GROUP BY子句中? [SQL服務器2005]

SELECT 
    SerialNo, 
    MAX(AddDate) AS AddDate 
FROM 
    tst_EquipmentItem 
WHERE 
    ControlNo = 'TM-00012' 
GROUP BY 
    SerialNo 
ORDER BY 
    AddDate 
OUTPUT: 
SerialNo////AddDate 
======================================= 
TM-00012////2008-08-05 10:25:00.000 

現在在tst_Equipment桌子上有一個ControlNo列最新的序列號。如果我有ControlNo上面的說法,我收到了不同的輸出

OUTPUT 
SerialNo///ControlNo///AddDate 
==================================================== 
TM-00012///TM-CGI-F-0027///2004-02-09 08:20:00.000 
TM-00012///TM-EN-N-0068///2008-08-05 10:25:00.000 

怎樣包括ControlNo列,而不必把它在GROUP BY子句,這樣我可以得到每個的SerialNo最新ControlNo?

+0

請問爲什麼不把'ControlNo'成'組by'部分?你的預期結果是什麼? – 2011-12-23 08:09:07

+0

因爲我得到了兩個不同的數字,而不是隻獲取最新的數字 – Kurusu 2011-12-23 08:11:56

+0

那麼您可以檢查我的答案,並告訴是否可以(根據您的期望)? – 2011-12-23 08:16:44

回答

2

不知道你的數據,我會做:

select distinct t.serialNo, e.controlNo, t.addDate 
from tst_EquipmentItem e 
join (
    select serialNo, max(addDate) as addDate 
    from tst_EquipmentItem 
    group by serialNo 
) t on t.serialNo = e.serialNo and t.addDate = e.addDate 
+0

這個。但我也包括addDate將它們鏈接在一起;現在我得到我需要的輸出! – Kurusu 2011-12-23 08:17:36

+0

@Kurusu,這是我的[原始版本](http://stackoverflow.com/revisions/8613588/1),我會回滾到該修訂版:-)。 – 2011-12-23 08:21:39

+0

這是一樣的 選擇t.serialNo,MAX(t.controlNo),MAX(t.addDate) 從tst_EquipmentItemË GROUP BY t.serialNo 除非你controlno不是增量(即,最後一個可能不是最高的數字) – 2011-12-23 08:42:07

1

它必須在group by子句中,或者是計算值的一部分。 ,示例

SUM(ControlNo), MAX(ControlNo), MIN(ControlNo). 

我會建議在您的情況下最大,假設數字增加。

+0

我不認爲我可以使用SUM(),因爲它的數據類型是varchar,並且MAX()似乎沒有任何作用 – Kurusu 2011-12-23 08:05:08

+0

然後把它放在group by子句 – rahularyansharma 2011-12-23 08:11:26

+0

是的總和只是作爲不同功能的一個例子你可以使用,而不是組。 – 2011-12-23 08:40:23

相關問題