我有以下查询
SELECT McId, MAX(TimeDone)
FROM Trace
WHERE PcbId = 'C825514362'
AND DeviceId <> 0 GROUP BY McId
但我还需要从以下列Program
,DeviceId
,OrderNo
是否有可能以某种方式将其组合在同一个查询中?
此查询应在mssql,mysql和oracle下运行。
答案 0 :(得分:2)
好吧,我猜你想要获得包含TimeDone最大值的行的Program,DeviceId和OrderNo的值。据我所知,你必须用子查询来做到这一点。 这样的事情:
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;
答案 1 :(得分:1)
SELECT
McId,
MAX(TimeDone),
Program,
DeviceId,
OrderNo
FROM Trace
WHERE PcbId = 'C825514362' AND DeviceId <> 0
GROUP BY
McId,
Program,
DeviceId,
OrderNo
答案 2 :(得分:0)
您是否尝试过以下构造?
SELECT McId, MAX(TimeDone),Program,DeviceId,OrderNo FROM Trace WHERE PcbId = 'C825514362' AND DeviceId <> 0 GROUP BY McId,Program,DeviceId,OrderNo
答案 3 :(得分:0)
为什么你不能通过?
将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
答案 4 :(得分:0)
三种解决方案。
考虑到您需要MAX
的{{1}}
SELECT McId, MAX(TimeDone), MAX(Program), MAX(DeviceId), MAX(OrderNo) FROM Trace WHERE PcbId = 'C825514362' AND DeviceId 0 GROUP BY McId;
考虑到您希望剩余的列以逗号分隔,并以Program,DeviceId,OrderNo
作为分隔符
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;