我有以下查询
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)
FROM Trace
WHERE PcbId = 'C825514362'
AND DeviceId <> 0 GROUP BY McId
但我还需要从以下列中获取Program
值DeviceId
,,OrderNo
是否有可能以某种方式将其组合在同一个查询中?
这个查询应该在 mssql 、 mysql 和 oracle 下运行。
好吧,我猜你想获取包含 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;
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 添加到 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
三种解决方案。
考虑到你想要MAX
的Program,DeviceId,OrderNo
选择麦克德, MAX(时间完成), MAX(程序), 最大(设备 ID), MAX(订单号) 从跟踪 其中 PcbId = 'C825514362' AND DeviceId 0 按麦克德分组;
考虑到您希望剩余的列以逗号分隔,并~
作为分隔符
选择麦克德, MAX(时间完成), GROUP_CONCAT('~', Program, '~', DeviceId, '~', OrderNo) 从跟踪 其中 PcbId = 'C825514362' AND DeviceId 0 按麦克德分组
考虑到您想与 McId 一起分组
选择麦克德, MAX(时间完成), 程序, 设备编号, 订单号 从跟踪 其中 PcbId = 'C825514362' AND DeviceId 0 按 McId、程序、DeviceId、OrderNo 分组;