sql-server - 限制每列值的 sql 结果
问题描述
我正在尝试为游标建立一个选择语句。
我的表有车辆事件,对于我的光标,我在确定的时间段内抓住所有点火和点火事件。
我想通过联合将每辆车的那个时间段的第一个和最后一个事件联合到我的选择中,我的想法是,该事件的 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]
解决方案
假设 IgnitionOFF 在 IgnitionON 日期时间之后
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]
推荐阅读
- php - 如果条件和条件分组不起作用
- google-cloud-firestore - 如何在 Firestore 上读取/写入特定数据
- php - 如何从 HTML 表单中获取数组数据?
- html - 不会在 Chrome 中显示超过 999 行
- javascript - 为什么视频不播放,第一次会播放动态改变它不会播放
- asp.net-mvc - ASP.NET MVC 5:显示登录用户的详细信息
- python - 使用 Python 查找 2D 峰值突出
- javascript - 用于 div 的 Vue 路由器
- java - ArangoDB Spring Data 2,java.lang.Object / 无效的地图类型
- linux - 启动时重新启动 autossh 反向隧道的问题