我有一张桌子
MeetPointID MeetPointName date ZoneStartTime ZoneStopTime Driver DriverCode Car CarPlate
12590 123 2018-06-12 2018-06-12 15:18:44 2018-06-12 15:19:24 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
12590 123 2018-06-12 2018-06-12 15:19:24 2018-06-12 15:24:45 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
12590 123 2018-06-12 2018-06-12 15:24:45 2018-06-12 15:25:05 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
260832 345 2018-06-12 2018-06-12 15:17:44 2018-06-12 15:19:24 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
260832 345 2018-06-12 2018-06-12 15:19:24 2018-06-12 15:24:45 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
260832 345 2018-06-12 2018-06-12 15:24:45 2018-06-12 15:27:05 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
表显示了从某些区域进入和离开的时间。我想合并所有行,其中MeetPointId相同,并且ZoneStopTime与下一行ZoneStartTime相同。我想得到的是一个如下表:
MeetPointID MeetPointName date ZoneStartTime ZoneStopTime Driver DriverCode Car CarPlate
12590 123 2018-06-12 2018-06-12 15:18:44 2018-06-12 15:25:05 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
260832 345 2018-06-12 2018-06-12 15:17:44 2018-06-12 15:24:45 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
我现在拥有的是:
SELECT
ID as MeetPointID
,MeetPointName
,CONVERT(date, t.StartTime) as data
,min(t.StartTime) as ZoneStartTime
,max(t.StopTime) as ZoneStopTime
/*,iif(
max(t.NextStartTime) = max(StopTime), max(t.NextStartTime), max(StopTime)
)as ZoneStopTime*/
,t.Driver as Driver
,DriverCode
,t.Car as Car
,CarPlate
from
(
Select
amp.ID,
rza.StartTime,
rza.StopTime,
rsa.MainActivityID,
iif((rza.StopTime = LAST_VALUE(rza.StartTime) OVER(PARTITION BY rsa.MainActivityID ORDER BY CONVERT(date, rza.StopTime) asc)),
LAST_VALUE(rza.StartTime) OVER(PARTITION BY rsa.MainActivityID ORDER BY CONVERT(date, rza.StopTime) asc),
rza.StopTime
)as NextStartTime
,ad.DriverLastName + ' ' + ad.DriverFirstName as Driver
,ad.DriverCode
,ac.CarPlate + ' ' + ac.CarBrand + ' ' + ac.CarModel as Car
,ac.CarPlate
,amp.MeetPointName
FROM
RPT_SUB_ACTIVITY rsa
JOIN RPT_ZONE_ACTIVITY rza on rza.SubActivityID= rsa.ID
JOIN RPT_ZoneActivityMeetPoints rzamp on rza.ID = rzamp.ZoneActivityID
JOIN APP_MEET_POINTS amp on rzamp.MeetPointsID=amp.ID
JOIN GPS_DEVICE gd on rsa.DeviceID = gd.DeviceID
JOIN APP_DRIVER ad on gd.DriverID = ad.DriverID
JOIN APP_CAR ac on ac.CarID = gd.CarID
WHERE
rza.DeviceID in (select * from dbo.fnList2Table(@DeviceIDList))
AND CONVERT(date, rza.StartTime) >= @StartDate
AND CONVERT(date, rza.StartTime) <= @StopDate
and rsa.TypeActivity in (1,2)
--and amp.ID = 12590
) t
GROUP BY
ID
,MainActivityID
,MeetPointName
,CONVERT(date, StartTime)
,t.Driver
,DriverCode
,t.Car
,CarPlate
ORDER BY
ID,
CONVERT(date, StartTime)
,ZoneStartTime
但是此sql查询使用的是ID,对于行而言,ID是不相同的,所以我只能合并其中的一些。
答案 0 :(得分:0)
@Thomas请检查以下数据:
MeetPointID StartTime StopTime MeetPointName Driver DriverCode Car CarPlate
12590 2018-06-13 22:23:48 2018-06-13 22:24:29 123 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
12590 2018-06-13 22:24:29 2018-06-13 22:24:57 123 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
12590 2018-06-13 22:28:42 2018-06-13 22:30:33 123 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
这应该给我以下结果:
MeetPointID StartTime StopTime MeetPointName Driver DriverCode Car CarPlate
12590 2018-06-13 22:23:48 2018-06-13 22:24:57 123 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO
12590 2018-06-13 22:28:42 2018-06-13 22:30:33 123 Nowak Jan NULL K1ZORRO PEŻAK EXPERT K1ZORRO