Подтвердить что ты не робот

Выберите день недели с даты

У меня есть следующая таблица в MySQL, которая регистрирует количество событий, происходящих каждый день

event_date     event_count
2011-05-03     21
2011-05-04     12
2011-05-05     12

Я хочу иметь возможность эффективно запрашивать этот диапазон по дате и по дням недели. Например: "Что такое event_count по вторникам в мае?"

В настоящее время поле event_date является типом даты. Существуют ли какие-либо функции в MySQL, которые позволяют мне запрашивать этот столбец по дням недели, или мне нужно добавить еще один столбец в таблицу для хранения дня недели?

В таблице будут храниться сотни тысяч строк, поэтому, учитывая выбор, я выберу наиболее эффективное решение (в отличие от самого простого).

4b9b3361

Ответ 1

Используйте DAYOFWEEK в вашем запросе, например:

SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;

Здесь вы найдете всю информацию по субботам в мае.

Чтобы получить самые быстрые чтения, храните денормализованное поле, которое является днем ​​недели (и все, что вам нужно). Таким образом, вы можете индексировать столбцы и избегать полного сканирования таблицы.

Просто попробуйте выше, чтобы узнать, подходит ли оно вашим потребностям, а если нет, добавьте дополнительные столбцы и сохраните данные при записи. Просто следите за аномалиями обновления (убедитесь, что вы обновили столбец day_of_week, если вы изменили event_date).

Обратите внимание, что денормализованные поля увеличивают время, затрачиваемое на запись, увеличивают расчеты при записи и занимают больше места. Убедитесь, что вам действительно нужна польза, и можете измерить, что она вам помогает.

Ответ 3

Если вы хотите текстовое представление дня недели - используйте функцию DAYNAME().