我有一个有趣的问题,我不确定如何编写查询来解决它。假设我有一张名为“汽车”的桌子。它有两列,CarId(int PK)和ArrivalTime(datetime)。当汽车进入空间时,输入到达时间。
我需要知道的是:对于每辆车,有多少人在到达之前的24个时间段内进入该空间。
我想不使用光标写这个,但不知道我怎么做。有想法的任何SQL专家吗?
哦 - 我应该提到正在使用的SQL Server版本是2005年。
答案 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