Лучший способ суммировать данные о времени остановки? - PullRequest
1 голос
/ 01 июня 2010

Этот вопрос близок к этому:

Найти период превышения скорости?

Вот мой стол:

  Longtitude    Latitude    Velocity    Time
102           401            40      2010-06-01 10:22:34.000
103           403            50      2010-06-01 10:40:00.000
104           405             0      2010-06-01 11:00:03.000
104           405             0      2010-06-01 11:10:05.000
105           406            35      2010-06-01 11:15:30.000
106           403            60      2010-06-01 11:20:00.000
108           404            70      2010-06-01 11:30:05.000
109           405             0      2010-06-01 11:35:00.000
109           405             0      2010-06-01 11:40:00.000
105           407            40      2010-06-01 11:50:00.000
104           406            30      2010-06-01 12:00:00.000
101           409            50      2010-06-01 12:05:30.000
104           405             0      2010-06-01 11:05:30.000

Я хочу обобщить время, когда транспортное средство остановилось (скорость = 0), включая: оно останавливалось с момента «когда» до «когда», через сколько минут, сколько раз оно останавливалось и сколько раз оно останавливалось.

Я написал этот запрос, чтобы сделать это:

select longtitude, latitude, MIN(time), MAX(time), DATEDIFF(minute, MIN(Time), MAX(time))
as Timespan from table_1 where velocity = 0 group by longtitude,latitude

select DATEDIFF(minute, MIN(Time), MAX(time)) as minute into #temp3
 from table_1 where velocity = 0 group by longtitude,latitude

select COUNT(*) as [number]from #temp
select SUM(minute) as [totaltime] from #temp3

drop table #temp

Запрос возврата:

longtitude  latitude    (No column name)    (No column name)    Timespan
    104 405 2010-06-01 11:00:03.000 2010-06-01 11:10:05.000 10
    109 405 2010-06-01 11:35:00.000 2010-06-01 11:40:00.000 5

number
2

totaltime
15

Вы можете видеть, что это отлично работает, но мне действительно не нравится таблица #temp. Есть ли возможность запросить это без использования временной таблицы?

Спасибо.

1 Ответ

2 голосов
/ 01 июня 2010

Вы не можете вкладывать агрегаты в SQL Server (например, SUM(DATEDIFF(minute, MIN(Time), MAX(time))), но можете использовать производную таблицу вместо временной).

SELECT SUM(minute) FROM
(
select DATEDIFF(minute, MIN(Time), MAX(time)) as minute 
 from table_1 where velocity = 0 group by longtitude,latitude
) derived
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...