2016-05-12 9 views
-1

をグループ化達成するために、私は次のクエリを使用していますが、それは私が実行した後が、画像Iに強調されているように、以下の結果を得た結果に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 

を以下の表示driID(6桁目「DRV0000100」など)が異なるため、同じ車両ID EQM0000009および他の車両の4つのレコードを取得します。

EQM0000009には、4つのレコードのうち最大の日時値を持つレコードが1つだけ必要です。日時はイメージの最後の列です。どのように私はグループ内でそのグループを行うことができますか?あなたは表の別名を持っている場合、クエリの下

+0

ファーストをオフにするのに役立ちます。基本的には、tbl_DriMasterで最大値を見つけてそれに戻ってくる必要があります。 – nscheaffer

答えて

1

は、「GPS」、「EQ」と「DR」の列がどのテーブルから来ている明確に示すためにそれらを使用するよう、あなた

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 
関連する問題