我有一个表(行程),其中包含列的响应数据:
通常两辆车会在同一天响应相同的地址,我需要找到那个首先出现的地址。
我试过这个:
SELECT
TripDate,
Job,
Vehicle,
DispatchDateTime
(SELECT min(OnSceneDateTime)
FROM Trips AS FirstOnScene
WHERE AllTrips.TripDate = FirstOnScene.TripDate
AND AllTrips.Address = FirstOnScene.Address) AS FirstOnScene
FROM
Trips AS AllTrips
但我仍然会返回两条记录,并且两者都有相同的FirstOnScene time
。
我如何只使用DispatchDateTime
和OnSceneDateTime
来获取记录,而不是第二个在场的行?
以下是表中的几个示例行:
2016-01-01 0169-a 150 Main St 2016-01-01 16:52 2016-01-01 16:59 Truck 1
2016-01-01 0171-a 150 Main St 2016-01-01 16:53 2016-01-01 17:05 Truck 2
2016-01-01 0190-a 29 Spring St 2016-01-01 17:19 2016-01-01 17:30 Truck 5
2016-01-02 0111-a 8 Fist St 2016-01-02 09:30 2016-01-02 09:40 Truck 1
2016-01-02 0112-a 8 Fist St 2016-01-02 09:32 2016-01-02 09:38 Truck 2
在上面的示例中,我需要返回该数据集的第一行,第三行和最后一行。
答案 0 :(得分:2)
这是基于所提供的稀疏信息在黑暗中的总镜头。我真的不知道什么定义了给定的事件,所以你可以相应地调整分区。
with sortedValues as
(
select TripDate
, Job
, Vehicle
, OnSceneDateTime
, ROW_NUMBER() over(partition by Address, DispatchDateTime order by OnSceneDateTime desc) as RowNum
from Trips
)
select TripDate
, Job
, Vehicle
, OnSceneDateTime
from sortedValues
where RowNum = 1
答案 1 :(得分:0)
您可以通过仅选择MIN
OnSceneDateTime来过滤行,如下所示:
SELECT TripDate, Job, Vehicle, DispatchDateTime,OnSceneDateTime FirstOnScene
FROM Trips as AllTrips
WHERE AllTrips.OnSceneDateTime = (SELECT MIN(OnSceneDateTime)
FROM Trips as FirstOnScene
WHERE AllTrips.TripDate = FirstOnScene.TripDate
and AllTrips.Address = FirstOnScene.Address
)
答案 2 :(得分:-1)
如何在OnSceneDateTime上使用ORDER BY然后限制1.这样的简化版本:
SELECT TripDate, Job, Vehicle, DispatchDateTime, OnSceneDateTime FROM trips ORDER BY OnSceneDateTime LIMIT 1