То, что вы хотите сделать, это использовать таблицу «подсчет» или «цифры». По сути, вы создаете таблицу с одним целочисленным столбцом, в котором числа увеличиваются от 1 до очень большого числа. Таким образом, если в таблице подсчета есть 1000 записей, в таблице находятся числа от 1 до 1000. Вы захотите поместить в него больше цифр, чем 1000, но, надеюсь, вы поймете идею.
Как только вы получите таблицу подсчета (нажмите здесь для сценария), вы выберете ее в свой запрос, где numtablevalue
находится в диапазоне от 1 до enddate - startdate
(в минутах). А затем сгруппировать по startdate + numtablevalue
.
Так что-то вроде этого (псевдо SQL) должно работать:
SELECT 'startdate' + INTERVAL tt.id MINUTE, COUNT(t1.timestampfield)
FROM tallytable AS tt
INNER JOIN
table AS t1
ON 'startdate' + INTERVAL tt.id MINUTE = t1.timestampfield
WHERE
tt.id BETWEEN 1 AND GETMINUTES('enddate' - 'begindate')
GROUP BY 'startdate' + INTERVAL tt.id MINUTE
Обычно мы выбираем числа от 1 до количества секунд между двумя датами. Затем мы используем startdate + tt.id
, чтобы получить каждую секунду между датами. Затем мы присоединяемся и группируемся по этому, чтобы найти количество записей из t1
, которые попадают в каждую минуту, как выбрано с использованием таблицы номеров. Я надеюсь, что это имеет смысл.
Есть несколько вещей, которые вы можете отметить:
- Это получит времена> startdate (в отличие от> = startdate)
- Будьте осторожны, если ваши временные метки имеют секунды, связанные с ними, поскольку
5:12 PM
может не равняться 5:12:30 PM