的選擇,我有以下查詢GROUP BY和列
SELECT McId, MAX(TimeDone)
FROM Trace
WHERE PcbId = 'C825514362'
AND DeviceId <> 0 GROUP BY McId
但我還需要從以下幾列Program
,DeviceId
獲取值,OrderNo
是否有可能以某種方式結合起來,在同一查詢?
該查詢應該在mssql,mysql和oracle下運行。
的選擇,我有以下查詢GROUP BY和列
SELECT McId, MAX(TimeDone)
FROM Trace
WHERE PcbId = 'C825514362'
AND DeviceId <> 0 GROUP BY McId
但我還需要從以下幾列Program
,DeviceId
獲取值,OrderNo
是否有可能以某種方式結合起來,在同一查詢?
該查詢應該在mssql,mysql和oracle下運行。
SELECT
McId,
MAX(TimeDone),
Program,
DeviceId,
OrderNo
FROM Trace
WHERE PcbId = 'C825514362' AND DeviceId <> 0
GROUP BY
McId,
Program,
DeviceId,
OrderNo
您是否嘗試過以下構造?
SELECT McId, MAX(TimeDone),Program,DeviceId,OrderNo FROM Trace WHERE PcbId = 'C825514362' AND DeviceId <> 0 GROUP BY McId,Program,DeviceId,OrderNo
爲什麼不能將Program,DeviceId,OrderNo添加到組中?
如果您回答它會生成更多行,因爲「Program,DeviceId,OrderNo」的值不同,您希望顯示哪個值?
你總是可以嵌入在你組一個子查詢通過獲得這個值,但再次,如果你有一個以上的可能性,您需要定義規則,拿出方案,例如
SELECT McId, MAX(TimeDone),
(select top 1 program from trace t2 where t2.McId = trace.McId) as program
FROM Trace
WHERE PcbId = 'C825514362' AND DeviceId <> 0
GROUP BY McId
三種解決方案
考慮到你想要的Program,DeviceId,OrderNo
SELECT McId, MAX(TimeDone), MAX(Program), MAX(DeviceId), MAX(OrderNo) FROM Trace WHERE PcbId = 'C825514362' AND DeviceId 0 GROUP BY McId;
的MAX
考慮你想要剩餘的列逗號,~
分開,分隔
SELECT McId, MAX(TimeDone), GROUP_CONCAT('~', Program, '~', DeviceId, '~', OrderNo) FROM Trace WHERE PcbId = 'C825514362' AND DeviceId 0 GROUP BY McId
考慮要進行分組連同McId
SELECT McId, MAX(TimeDone), Program, DeviceId, OrderNo FROM Trace WHERE PcbId = 'C825514362' AND DeviceId 0 GROUP BY McId, Program, DeviceId, OrderNo;
嗯,我猜你想計劃,DEVICEID和OrderNo的值包含最大TimeDone的行。據我所知,你必須用子查詢來做到這一點。 類似的東西:
SELECT t.McID, t.Program, t.DeviceID, t.OrderNo, t.TimeDone
FROM Trace t,
(SELECT MAX(TimeDone) as maxtime, McID
FROM Trace
GROUP BY McID) maxresults
WHERE t.McID = maxresults.McID
AND t.TimeDone= maxresults.maxtime;
你想與這些附加列.. 請提供一些數據和預期的結果到底是什麼.. –
@pratik GARG,剛剛拿到的數據是,在根據這些列,像我對於McId –
ohh然後回答iiro發佈的是你期待的結果.. 在你的描述中,看起來你不想在沒有在group by子句中添加列的情況下做。 –