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子句中添加列。。