SQL, запросы по интервалам дат

У меня есть набор данных, который я хочу разделить по интервалу дат. Это набор очищенных веб-данных, и каждый элемент имеет отметку времени в миллисекундах в стиле unix, а также стандартную дату и время UTC.

Я хотел бы иметь возможность запрашивать набор данных, выбирая строки, наиболее близкие к различным временным интервалам: например: каждый час, один раз в день, один раз в неделю и т. д.

Нет никакой гарантии, что временные метки будут равномерно падать на временные интервалы, иначе я бы просто выполнил мод-запрос для временной метки.

Есть ли способ сделать это с помощью команд SQL, которые не включают хранимые процессы или какие-то предварительно вычисленные таблицы поддержки?

Я использую последнюю версию MariaDB.

EDIT: отмеченный ответ не совсем отвечает на мой конкретный вопрос, но это достойный ответ на более общую проблему, поэтому я пошел дальше и отметил его.

Я специально искал способ запросить набор данных, где метка времени сильно варьируется, и получить строки, которые достаточно близки к периодическим временным интервалам. Например: получить все строки, которые ближе всего к 24-часовым интервалам прямо сейчас.

В итоге я использовал модульный запрос для решения проблемы: отметка времени% интервал ‹ среднее расстояние между точками данных. Это иногда дает дополнительные очки и пропускает несколько, но этого было достаточно для моего графического приложения.

И мне надоело постоянно падать библиотека node-mysql, поэтому я перешел на MongoDB.


person DanHeidel    schedule 23.11.2013    source источник


Ответы (1)


Вы говорите, что хотите «ближайший к различным временным интервалам», но затем говорите «каждый час/день/неделю», поэтому фактическая реализация будет зависеть от того, что вы действительно хотите, но вы можете использовать множество стандартных функций даты/времени для группировки записей , например считать по дням:

SELECT DATE(your_DateTime) AS Dt, COUNT(something) AS CT
FROM yourTable
GROUP BY DATE(your_DateTime)

Считать по часам:

SELECT DATE(your_DateTime) AS Dt,HOUR(your_DateTime) AS Hr, COUNT(something) AS CT
FROM yourTable
GROUP BY DATE(your_DateTime), HOUR(your_DateTime)

См. полный список поддерживаемых функций даты и времени здесь: https://mariadb.com/kb/en/date-and-time-functions/

person Hart CO    schedule 23.11.2013