簡體   English   中英

比較 SQL Server 中的兩行並只返回一行

[英]Compare two rows in SQL Server and return only one row

我有一個表(行程),其中包含帶有列的響應數據:

  • 旅行日期
  • 工作
  • 地址
  • 調度日期時間
  • 現場日期時間
  • 車輛

通常兩輛車會在同一天回復同一個地址,我需要找到最先到達的那一輛。

我試過這個:

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

我如何只獲得記錄,它是DispatchDateTimeOnSceneDateTime ,而不是第二個場景中的旅行行?

以下是表中的一些示例行:

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

在上面的示例中,我需要返回該數據集的第一行、第三行和最后一行。

這是基於提供的稀疏信息在黑暗中進行的總拍攝。 我真的不知道是什么定義了給定的事件,因此您可以相應地調整分區。

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

您可以通過僅選擇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
     )

如何在 OnSceneDateTime 上使用 ORDER BY 然后限制 1. 像這樣的簡化版本:

SELECT TripDate, Job, Vehicle, DispatchDateTime, OnSceneDateTime FROM trips ORDER BY OnSceneDateTime LIMIT 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM