У меня есть данные, которые выглядят так:
$ Time : int 0 1 5 8 10 11 15 17 18 20 ...
$ NumOfFlights: int 1 6 144 91 504 15 1256 1 1 578 ...
Колонка времени — всего 24 часа. От 0 до 2400
Что я надеюсь получить:
hour | number of flight
-------------------------------------
1st | 240
2nd | 223
... | ...
24th | 122
Где 1-й час — с полуночи до 1:00, 2-й — с 1:00 до 2:00 и так далее до 24-го, то есть с 23:00 до полуночи. И количество полетов — это просто общее количество NumOfFlights в пределах диапазона.
Я пробовал:
dbGetQuery(conn,"
SELECT
flights.CRSDepTime AS Time,
COUNT(flights.CRSDepTime) AS NumOnTimeFlights
FROM flights
GROUP BY CRSDepTime/60
")
Но я понимаю, что так нельзя. Результаты, которые я получу, будут иметь 40 значений времени.
> head
Time NumOnTimeFlights
1 50 6055
2 105 2383
3 133 674
4 200 446
5 245 266
6 310 34
> tail
Time NumOnTimeFlights
35 2045 48136
36 2120 103229
37 2215 15737
38 2245 36416
39 2300 15322
40 2355 8018
ах да, я забыл добавить это. Теперь это отредактировано.
Если, например, в столбце «Время» есть значение 1000
, какое время оно представляет?
1000 это 10 утра
Тогда в чем проблема с ответом Серга?
Если ваш столбец CRSDepTime
представляет собой целочисленное закодированное время, например HHmm
, то CRSDepTime/100
извлечет час.
SELECT
CRSDepTime/100 AS hh,
COUNT(flights.CRSDepTime) AS NumOnTimeFlights
FROM flights
GROUP BY CRSDepTime/100
Я считаю, что это не так, это просто целочисленный тип данных. как проверить, закодирован ли мой столбец как время?
Ваши данные, например. 38 2245 36416
похоже, что время 22:45 закодировано как 22*100 + 45
целое число
can't be done this way.
Почему? Если вы получаете сообщение об ошибке, опубликуйте сообщение об ошибке. В противном случае опубликуйте результаты и объясните, почему они неверны.