0

我有以下查询

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

但我还需要从以下列中获取ProgramDeviceId,,OrderNo

是否有可能以某种方式将其组合在同一个查询中?

这个查询应该在 mssql 、 mysql 和 oracle 下运行。

4

5 回答 5

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;
于 2012-05-23T10:13:12.803 回答
1
SELECT  
 McId, 
 MAX(TimeDone),
 Program,
 DeviceId,
 OrderNo
FROM  Trace
WHERE   PcbId = 'C825514362' AND  DeviceId <> 0
GROUP BY 
 McId,
 Program,
 DeviceId,
 OrderNo
于 2012-05-23T10:00:33.473 回答
0

您是否尝试过以下构造?

SELECT McId, MAX(TimeDone),Program,DeviceId,OrderNo FROM Trace WHERE PcbId = 'C825514362' AND  DeviceId <> 0 GROUP BY McId,Program,DeviceId,OrderNo
于 2012-05-23T10:02:45.237 回答
0

为什么不能将 Program,DeviceId,OrderNo 添加到 group by?

如果您回答它会产生更多行,因为“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
于 2012-05-23T10:04:03.113 回答
0

三种解决方案。

  1. 考虑到你想要MAXProgram,DeviceId,OrderNo

    选择麦克德,
           MAX(时间完成),
           MAX(程序),
           最大(设备 ID),
           MAX(订单号)
    从跟踪
    其中 PcbId = 'C825514362' AND DeviceId 0
    按麦克德分组;
    
  2. 考虑到您希望剩余的列以逗号分隔,并~作为分隔符

    选择麦克德,
           MAX(时间完成),
           GROUP_CONCAT('~', Program, '~', DeviceId, '~', OrderNo)
    从跟踪
    其中 PcbId = 'C825514362' AND DeviceId 0
    按麦克德分组
    
  3. 考虑到您想与 McId 一起分组

    选择麦克德,
           MAX(时间完成),
           程序,
           设备编号,
           订单号
    从跟踪
    其中 PcbId = 'C825514362' AND DeviceId 0
    按 McId、程序、DeviceId、OrderNo 分组;
    
于 2012-05-23T10:12:51.647 回答