mysql группировка по дням

Группа запросов MySQL по дням / месяцам / годам

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

13 ответов

Примечание (в первую очередь, для потенциальных downvoters). В настоящее время это может оказаться не столь эффективным, как другие предложения. Тем не менее, я оставляю его в качестве альтернативы, которая также может помочь увидеть, насколько быстрее другие решения. (Ибо нельзя отличить быстрое от медленного, пока не увидишь разницу.) Кроме того, с течением времени могут быть внесены изменения в движок MySQL в отношении оптимизации, чтобы сделать это решение в некоторых (возможно, не так далеко) точка в будущем, чтобы стать вполне сопоставимыми по эффективности с большинством других.

Я попытался использовать оператор » где » выше, я думал, что это правильно, так как никто не исправил его, но я был неправ; после некоторых поисков я узнал, что это правильная формула для оператора WHERE, поэтому код становится таким:

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

условие сравнения при группировании будет быстрее, чем функция DATE_FORMAT (которая возвращает строковое значение). Попробуйте использовать функцию / поле, которые возвращают нестроковое значение для условия сравнения SQL (где, имея, заказ по, Группа по).

Если ваш поиск более нескольких лет, и вы все еще хотите группировать ежемесячно, я предлагаю:

Версия № 1:

версия #2 (более эффективный):

Я сравнил эти версии на большой таблице с 1,357,918 строками (InnoDB в), и 2-я версия, похоже, имеет лучшие результаты.

version1 (в среднем выполняется 10): 1.404 секунд
version2 (в среднем выполняется 10): 0.780 секунд

( SQL_NO_CACHE ключ добавлен, чтобы предотвратить MySQL от кэширования запросов.)

Если вы хотите сгруппировать по дате в MySQL, используйте код ниже:

надеюсь, это сэкономит некоторое время для тех, кто собирается найти этот поток.

если вы хотите фильтровать записи за определенный год (например, 2000), оптимизируйте WHERE пункт такой:

результаты были сгенерированы для таблицы, содержащей 300k строк и столбец index on date.

Что касается GROUP BY предложение, я протестировал три варианта против вышеупомянутой таблицы; вот результаты:

последний является победителем.

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

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

следующий запрос работал для меня в Oracle Database 12c Release 12.1.0.1.0

вы можете сделать это просто Mysql DATE_FORMAT () функция в группе BY. Может потребоваться добавить дополнительный столбец для большей ясности в некоторых случаях, например, когда записи охватывают несколько лет, а затем один и тот же месяц в разные годы.Здесь так много вариантов, которые вы можете настроить. Пожалуйста, прочитайте это для начала. Надеюсь, это будет очень полезно для вас. Вот пример запроса для вашего понимания

Я предпочитаю оптимизировать выбор группы на один год следующим образом:

Источник

Как сделать быструю группировку по дням и по часам в mysql?

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

Верно, просто индексы не помогут — любая операция над полем сразу блокирует использование индекса по нему. Добавлять ещё поля и там хранить данных в часах и днях (денормализация)

Кстати в СУБД побольше калибром есть возможность делать вычисляемые поля и делать по ним индексы, а также можно делать индексы по функции — что вам очень сильно помогло бы.

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

быстро можно только если сделать хранилище отдельное
дата | кол-во
и инкриментить с общим инсертом. (update order_counter set count=count+1 where date=date_format(date,’и какой типо групперовки вам нужен’), надо проверить что будет делать replace или insert с on dublicate key для самой первой встаки в идеале вместо update replace тогда и запись не надо будет проверять что есть.

либо опишите задачу подробнее, если в выборки еще фильтр какой-то есть,
то решение со счетчиком отдельным не поможет.

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

Попробуйте следующий вариант — 1. Это для группировки по дням
SELECT…
FROM…
GROUP BY UNIX_TIMESTAMP( поле с датой и временем ) DIV 24 * 3600

2. Это для группировки по часам
SELECT…
FROM…
GROUP BY UNIX_TIMESTAMP( поле с датой и временем ) DIV 3600

Если все еще будет тормозить (скорее всего так и будет), то эти два поля нужно добавлять к таблице и строить по ним индекс

Источник

Mysql группировка по дням месяца?

как я могу сгруппировать по дням, не имея значения в этот день

id date
1 01-02-16
2 05-02-16

а в результате получить

date count
01 1
02 0
03 0
04 0
05 1

Оценить 1 комментарий

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по дням

ну не скажите, представим такую задачу есть GPS трекер, где у каждой компании есть свой пул автомобилей.
Так же у нас есть отчет содержащий подневно информацию о суммарном расходе топлива для всех машин компании.
Таблица отчета имеет такую структуру:
— идентификатор
— дата, тип date, вес 3 байта
— сумма, ну допустим возьмем float, вес 4 байта.

Если же мы недостающие даты будем проставлять в оболочке, без использования джойнов:
1. Мы можем доставить недостающие даты приблизительно за 34 итерации
2. В результате простой выборки из БД в оболочку будет доставлено всего 3 записи общим размером 21 байт, а не 217

Источник

Работаем с датами в MySQL

Обновлено: 19 декабря, 2018

Вычитание даты от текущей

Следующий код позволяет вычислить разницу в днях между текущей датой, и датой в поле date_start таблицы tbl_sites

Добавление текущей даты/времени при вставке записи

Для сохранения в таблице времени и даты добавления новой записи, необходимо создать новое поле таблицы в Time, где время будет храниться в Unix формате, либо поле TIMESTAMP, в котором время будет храниться в виде: “2013-09-17 15:00:00”.

Для первого случая (поле Time) для сохранения времени добавления записи используется функция time(). Код в данном случае будет выглядеть таким образом:

Для второго случая (поле TIMESTAMP) используется параметр CURRENT_TIMESTAMP (текущее время). Соответственно код будет таким:

Следует отметить, что при дальнейшей работе с этими полями, для вывода их значений в удобном виде, либо для подсчета разницы с каким либо значением времени, необходимо будет эти значения преобразовывать. Например, для того чтобы перевести значение TIMESTAMP в формат Unix-времени, необходимо воспользоваться процедурой strtotime(). Пример данного преобразования выглядит следующим образом (считаем количество секунд, прошедших с времени добавления записи в БД):

Группировка записей по дням, месяцам

Если необходимо, например, посчитать количество звонков по дням, или месяцам (в случаях когда одна запись – звонок), можно сделать следующим образом:

Считаем количество звонков по дням в период последние 30 дней:

Источник

Mysql группировка по дням

profit
id | user_id | date | profit
1 1 2009-06-01 100.55
2 1 2009-06-03 110.55
3 1 2009-06-04 120.55
4 1 2009-06-07 140.55
.
5 1 2009-06-12 130.55
6 1 2009-06-13 150.55
7 1 2009-06-14 105.55

������� �������!7 ��� 09, 16:33����[7512098] �������� | ���������� �������� ����������

mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по днямRe: ������� ������ � ������������ �� �������. [new]
progi2007
Member

2009-08-08 150.0000
2009-08-07 100.0000
2009-06-18 1127.1973
2009-06-17 761.8159
2009-06-16 1061.7598
2009-06-15 1396.4341
2009-06-14 7452.1342
2009-06-13 629.0677
2009-06-12 466.9909
2009-06-11 1336.4949
2009-06-10 1770.0211
2009-06-07 4202.5746
2009-06-01 10509.7444

2009-06-01 �� 2009-06-05 | 10509.7444
2009-06-05 �� 2009-06-12 | 4202.5746 + 1770.0211 + 1336.4949 + 466.9909

��� ��� �� ���

7 ��� 09, 16:56����[7512260] �������� | ���������� �������� ����������
mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по днямRe: ������� ������ � ������������ �� �������. [new]
tanglir
Member

Group By Week(mytable.date), ���?

7 ��� 09, 17:54����[7512608] �������� | ���������� �������� ����������
mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по днямRe: ������� ������ � ������������ �� �������. [new]
progi2007
Member

������:
���������: 31

tanglir
progi2007,

Group By Week(mytable.date), ���?

DAYOFWEEK(d_date) startInt endInt SUM(profit)
7 2009-08-08 2009-08-09 150.0000
6 2009-08-07 2009-08-09 100.0000
5 2009-06-18 2009-06-21 1063.5653
4 2009-06-17 2009-06-21 761.8159
3 2009-06-16 2009-06-21 1061.7598
2 2009-06-15 2009-06-21 1396.4341
1 2009-06-15 2009-06-21 7452.1342
7 2009-06-13 2009-06-14 629.0677
6 2009-06-12 2009-06-14 466.9909
5 2009-06-11 2009-06-14 1336.4949
4 2009-06-10 2009-06-14 1770.0211
1 2009-06-08 2009-06-14 4202.5746
2 2009-06-01 2009-06-07 10509.7444

DAYOFWEEK(d_date) startInt endInt SUM(profit)
6 2009-08-07 2009-08-09 250.0000
3 2009-06-16 2009-06-21 11735.7093
4 2009-06-10 2009-06-14 8405.1491
2 2009-06-01 2009-06-07 10509.7444

����� � �����, � ���� ���� 4 ������ ��������, �� ������� �� ����� ����� ��� ����.

7 ��� 09, 18:16����[7512715] �������� | ���������� �������� ����������
mysql группировка по дням. Смотреть фото mysql группировка по дням. Смотреть картинку mysql группировка по дням. Картинка про mysql группировка по дням. Фото mysql группировка по днямRe: ������� ������ � ������������ �� �������. [new]
tanglir
Member

������:
���������: 31

tanglir
progi2007,

nedelya dbeg dend sumprf
31 2009-08-02 2009-08-08 250.0000
24 2009-06-14 2009-06-20 11799.3413
23 2009-06-07 2009-06-13 8405.1491
22 2009-05-31 2009-06-06 10509.7444

������������ � �� �� dbeg DESC
22 2009-05-31 2009-06-06 10509.7444

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *