I have a table with
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
Table is showing entering and leaving time from some zones. I want to merge all rows, where MeetPointId is the same, and where ZoneStopTime is the same as next row ZoneStartTime. What I want to get is a table like below:
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
What I have now is:
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
But this sql query is using ID's, which are not the same for the rows, so I'am able only to merge some of them.
@Thomas Please check data below:
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
And this should give me a result of:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.