Mysql 分组依据和列的选择

Mysql 分组依据和列的选择,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,我有以下疑问 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

我有以下疑问

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

您是否尝试过以下构造

SELECT McId, MAX(TimeDone),Program,DeviceId,OrderNo FROM Trace WHERE PcbId = 'C825514362' AND  DeviceId <> 0 GROUP BY McId,Program,DeviceId,OrderNo

为什么不能通过将程序、设备ID、订单号添加到组中

如果您回答它将生成更多行,因为Program、DeviceId和OrderNo的值与您希望显示的值不同

您始终可以在group by上嵌入子查询以获取此值,但是,如果您有多种可能性,您需要定义规则以生成程序,例如

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

为什么不能通过将程序、设备ID、订单号添加到组中

如果您回答它将生成更多行,因为Program、DeviceId和OrderNo的值与您希望显示的值不同

您始终可以在group by上嵌入子查询以获取此值,但是,如果您有多种可能性,您需要定义规则以生成程序,例如

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
三个解决方案

考虑到您想要最大的程序、设备ID、订单号

考虑到您希望与McId一起分组

SELECT McId, MAX(TimeDone), Program, DeviceId, OrderNo FROM Trace WHERE PcbId = 'C825514362' AND DeviceId 0 GROUP BY McId, Program, DeviceId, OrderNo; 三个解决方案

考虑到您想要最大的程序、设备ID、订单号

考虑到您希望与McId一起分组

SELECT McId, MAX(TimeDone), Program, DeviceId, OrderNo FROM Trace WHERE PcbId = 'C825514362' AND DeviceId 0 GROUP BY McId, Program, DeviceId, OrderNo;
好吧,我猜您想要获取包含最大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;

好吧,我猜您想要获取包含最大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;

对于这些附加列,您到底想要什么。。请提供一些数据和预期结果。@pratik garg,只是为了获得这些列下的数据,就像我为McIdohh所做的那样,然后iiro发布的答案就是您所期望的。。在您的描述中,如果不在group by子句中添加列,您似乎不想这样做..您希望这些附加列做什么。。请提供一些数据和预期结果。@pratik garg,只是为了获得这些列下的数据,就像我为McIdohh所做的那样,然后iiro发布的答案就是您所期望的。。在您的描述中,您似乎不想在GROUPBY子句中添加列。。