MySQL / SQL: группировка по дате только в столбце Datetime - PullRequest
160 голосов
/ 14 декабря 2008

Имея таблицу с таким столбцом, как: mydate DATETIME ...

У меня есть запрос, такой как:

SELECT SUM(foo), mydate FROM a_table GROUP BY a_table.mydate;

Это будет группировать по полному datetime, включая часы и минуты. Я хочу создать группу только к дате YYYY/MM/DD, а не к YYYY/MM/DD/HH/mm.

Кто-нибудь знает, как это сделать? Я все еще могу сделать это (как я atm), динамически в моем коде, но я очищаю мусорный код, и это можно сделать с помощью SQL, я просто не могу понять, как: (.

Ответы [ 4 ]

240 голосов
/ 14 декабря 2008

Приведите дату и время к дате, затем GROUP BY, используя этот синтаксис:

SELECT SUM(foo), DATE(mydate) FROM a_table GROUP BY DATE(a_table.mydate);

Или вы можете GROUP BY псевдоним, как @ orlandu63 предложил:

SELECT SUM(foo), DATE(mydate) DateOnly FROM a_table GROUP BY DateOnly;

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

17 голосов
/ 14 декабря 2008

Или:

SELECT SUM(foo), DATE(mydate) mydate FROM a_table GROUP BY mydate;

Более эффективно (я думаю.) Потому что вам не нужно разыгрывать mydate дважды в строке.

15 голосов
/ 28 марта 2012

Я обнаружил, что мне нужно сгруппироваться по месяцам и годам, поэтому ни одно из вышеперечисленного не помогло мне. Вместо этого я использовал date_format

SELECT date
FROM blog 
GROUP BY DATE_FORMAT(date, "%m-%y")
ORDER BY YEAR(date) DESC, MONTH(date) DESC 
7 голосов
/ 30 июля 2011
SELECT SUM(No), HOUR(dateofissue) 
FROM tablename 
WHERE dateofissue>='2011-07-30' 
GROUP BY HOUR(dateofissue)

Это даст час по сумме за определенный день!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...