Лучший способ суммировать данные во времена остановки?

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

Найти период по скорости?

Вот моя таблица:

  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
задан Community 23 May 2017 в 10:27
поделиться

1 ответ

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

SELECT SUM(minute) FROM
(
select DATEDIFF(minute, MIN(Time), MAX(time)) as minute 
 from table_1 where velocity = 0 group by longtitude,latitude
) derived
2
ответ дан 3 September 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: