2016-05-12 33 views
-1

我使用下面的查詢並顯示以下結果enter image description here如何實現SQL查詢分組內的分組

查詢

SELECT 
    Id, 
    COUNT(Id) AS Cnt, 
    VehNo, 
    VehName, 
    ValidTo, 
    IMIE, 
    dr.DriD, 
    DriName, 
    MAX(SignalDateTime) SignalDateTime, 
    MAX(DateTime) DateTime 
FROM tbl_gpsData gps 
LEFT JOIN tbl_Veh eq 
    ON eq.ID = gps.VehID 
LEFT JOIN tbl_DriMaster dr 
    ON dr.DriID = gps.DriID 
GROUP BY ID, 
     VehNo, 
     VehName, 
     ValidTo, 
     IMIE, 
     dr.DriID, 
     DriName 
ORDER BY ID ASC 

我得到以下結果執行後但強調圖像I因爲driID(第6列,「DRV0000100」等)是不同的,所以得到同樣的車輛EQM0000009和一些其他車輛的4條記錄。

我只想要EQM0000009的一個記錄,它具有4條記錄中的最大日期時間值。日期時間是圖像中的最後一列。我怎麼能在分組內進行分組?

+0

首先,如果你有表的別名,如「GPS」,「EQ」和「醫生」用它們來清楚地顯示這列從該表來。基本上,您需要在tbl_DriMaster中找到最大值,然後再回到它。 – nscheaffer

回答

1

下面的查詢會幫你

select Id,count(Id) as Cnt,VehNo,VehName,ValidTo,IMIE 
,dr.DriD,DriName 
,MAX(SignalDateTime)SignalDateTime,MAX(DateTime) [DateTime] 
into #temp 
from tbl_gpsData gps left join tbl_Veh eq 
on eq.ID=gps.VehID 
left join tbl_DriMaster dr on dr.DriID=gps.DriID 
group by ID, 
VehNo,VehName,ValidTo,IMIE 
,dr.DriID,DriName 


SELECT * FROM #temp a INNER JOIN (SELECT Id,MAX([DateTime]) AS Dt FROM #temp 
GROUP BY Id) b ON a.Id =b.Id AND a.[DateTime] = b.Dt