лимит результата sql на значение столбца - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать оператор выбора для курсора.

В моей таблице есть события транспортного средства, для моего курсора я фиксирую все события включения и выключения зажигания в определенный период времени.

Я хотел бы объединить первое и последнее событие этого периода времени для транспортного средства с моим выбором через объединение, я думаю, что условие where должно быть таким, что событие не может быть включено или выключено зажиганием, чтобы оно не повторялось сам. Но я не знаю, как получить событие для каждого автомобиля.

В настоящее время у меня есть следующее.

SELECT  
    al.ActivityLogID,
    al.[VehicleID],
    al.[DriverID],
    al.[ActivityDateTime],
    al.[EventSubTypeId]
FROM    
    [activitylog] a
WHERE   
    [ActivityDateTime] BETWEEN @StartDateTime AND @EndDateTime AND
    [EventSubTypeID] = 3 -- ignitionON

UNION

SELECT  
    al.ActivityLogID,
    al.[VehicleID],
    al.[DriverID],
    al.[ActivityDateTime],
    al.[EventSubTypeId]
FROM    
    [activitylog] a
WHERE   
    [ActivityDateTime] BETWEEN @StartDateTime AND @EndDateTime AND
    [EventSubTypeID] = 4 -- ignitionOFF
ORDER BY 
    [VehicleID], [ActivityDateTime]

1 Ответ

0 голосов
/ 20 июня 2019

Предполагая, что IgnitionOFF находится после IgnitionON datetime

SELECT  al.[VehicleID]
      , al.[DriverID]
      , MIN(al.[ActivityDateTime])
      , MAX(al.[ActivityDateTime])
FROM  [activitylog] al
WHERE [ActivityDateTime] BETWEEN @StartDateTime AND @EndDateTime AND
      [EventSubTypeID] IN (3,4) -- ignitionON/OFF
GROUP BY al.[VehicleID]
       , al.[DriverID]
ORDER BY al.[VehicleID]
       , al.[DriverID]

или, может быть, вам нужен этот:

SELECT [VehicleID]
      ,[EventSubTypeID]
      ,[ActivityDateTime]
FROM
(
  SELECT  al.[VehicleID]
        , [EventSubTypeID] 
        , MIN(al.[ActivityDateTime]) AS "ActivityDateTime"
  FROM  [activitylog] al
  WHERE [ActivityDateTime] BETWEEN @StartDateTime AND @EndDateTime AND
        [EventSubTypeID] = 3 -- ignitionON
  GROUP BY al.[VehicleID], [EventSubTypeID]
  UNION
  SELECT  al.[VehicleID]
        , [EventSubTypeID]
        , MAX(al.[ActivityDateTime]) AS "ActivityDateTime" 
  FROM  [activitylog] al
  WHERE [ActivityDateTime] BETWEEN @StartDateTime AND @EndDateTime AND
        [EventSubTypeID] = 4 -- ignitionOFF
  GROUP BY al.[VehicleID], [EventSubTypeID]
)
ORDER BY [VehicleID], [EventSubTypeID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...