Sql server 如何在sql查询中实现分组内分组
我正在使用以下查询,它显示以下结果 查询Sql server 如何在sql查询中实现分组内分组,sql-server,Sql Server,我正在使用以下查询,它显示以下结果 查询 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 JO
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
执行后我得到以下结果,但如图中突出显示的,我得到了相同vehid EQM0000009和其他一些vehid的4条记录,因为DRID(第6列“DRV000100”等)不同
我只需要EQM0000009的一条记录,它在4条记录中具有最大的datetime值。Datetime是图像中的最后一列。如何在分组中进行分组?下面的查询将帮助您
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
首先,如果您有表别名,如“gps”、“eq”和“dr”,请使用它们清楚地显示哪些列来自哪些表。基本上,您需要在tbl_DriMaster中找到最大值,然后重新加入它。