SQL查询根据时间返回计数

时间:2014-07-18 14:54:51

标签: sql sql-server

我有一个有趣的问题,我不确定如何编写查询来解决它。假设我有一张名为“汽车”的桌子。它有两列,CarId(int PK)和ArrivalTime(datetime)。当汽车进入空间时,输入到达时间。

我需要知道的是:对于每辆车,有多少人在到达之前的24个时间段内进入该空间。

我想不使用光标写这个,但不知道我怎么做。有想法的任何SQL专家吗?

哦 - 我应该提到正在使用的SQL Server版本是2005年。

2 个答案:

答案 0 :(得分:3)

您可以将查询与相关子查询或连接一起使用。

以下是使用连接操作的查询示例:

SELECT n.CarId
     , n.ArrivalDate
     , COUNT(p.CarId) AS cnt_previous_arrivals
  FROM cars n
  LEFT
  JOIN cars p
    ON p.CarId = n.CarId
   AND p.ArrivalDate >= DATEADD(HOUR,-24,n.ArrivalDate)
   AND p.ArrivalDate < n.ArrivalDate
 GROUP
    BY n.CarId
     , n.ArrivalDate

要获得具有相关子查询的等效结果,可以选择一个选项:

SELECT n.CarId
     , n.ArrivalDate
     , ( SELECT SUM(1) 
           FROM cars p 
          WHERE p.CarId = n.CarId
            AND p.ArrivalDate >= DATEADD(HOUR,-24,n.ArrivalDate)
            AND p.ArrivalDate < n.ArrivalDate
       ) AS cnt_previous_arrivals
  FROM cars n
 ORDER
    BY n.CarId
     , n.ArrivalDate

答案 1 :(得分:0)

select el1.car_id,
       ( select count(*)
           from entry_log el2
          where el2.datetime between DATEADD(day, -1, el1.datetime)
                 and el1.datetime
             and el2.car_id != el1. car_id 
        )
  from entry_log el1
where el1.car_id = :my_car_id