2012-05-23 3 views
0

의 선택 I그룹에 의해 열

OrderNo이 가능 어떻게 든 같은에서 그것을 결합하는 것입니다

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

그러나 나는 또한 다음과 같은 열이 Program, DeviceId에서 값을 얻을 필요가 다음 쿼리를이 쿼리?

이 쿼리는 mssql, mysql 및 oracle에서 실행해야합니다.

+0

정확히 당신이 이러한 추가 열이 원하는 .. 일부 데이터 및 예상 결과를 제공하시기 바랍니다 .. –

+0

@pratik GARG, 단지 데이터를 얻을 수 있다는 점에서 그 열에서, I와 같은 McId를 위해 do –

+0

ohh 그러면 대답은 iiro가 게시 한 것입니다 .. 설명에서 그룹별로 절을 추가하지 않으면 서 원하지 않는 것처럼 보입니다. –

답변

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

다음 구조를 사용해 보셨습니까?

SELECT McId, MAX(TimeDone),Program,DeviceId,OrderNo FROM Trace WHERE PcbId = 'C825514362' AND DeviceId <> 0 GROUP BY McId,Program,DeviceId,OrderNo 
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 
0

위한 프로그램을 마련하기 위해 규칙을 정의 할 필요가 세 가지 솔루션.

  1. 여러분이 그룹화하고자 고려 콤마로 나머지 열은 세퍼레이터

     
    SELECT McId, 
         MAX(TimeDone), 
         GROUP_CONCAT('~', Program, '~', DeviceId, '~', OrderNo) 
    FROM Trace 
    WHERE PcbId = 'C825514362' AND DeviceId 0 
    GROUP BY McId 
    
  2. ~ 구분하고자 고려 MAXProgram,DeviceId,OrderNo

     
    SELECT McId, 
         MAX(TimeDone), 
         MAX(Program), 
         MAX(DeviceId), 
         MAX(OrderNo) 
    FROM Trace 
    WHERE PcbId = 'C825514362' AND DeviceId 0 
    GROUP BY McId; 
    
  3. 의 원하는 고려 맥드와 함께

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

글쎄, 난 당신이 TimeDone의 최대 값을 포함하는 행에 대한 프로그램의 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; 
관련 문제