Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在sql查询中实现分组内分组_Sql Server - Fatal编程技术网

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中找到最大值,然后重新加入它。