MySQL/SQL: группировать по дате только в столбце Datetime

Наличие таблицы с столбцом типа: 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, я просто не могу понять, как: (.

Ответ 1

Передайте дату и дату, затем 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;

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

Ответ 2

Или:

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

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

Ответ 3

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

SELECT date
FROM blog 
GROUP BY DATE_FORMAT(date, "%m-%y")
ORDER BY YEAR(date) DESC, MONTH(date) DESC 

Ответ 4

SELECT SUM(No), HOUR(dateofissue) 
FROM tablename 
WHERE dateofissue>='2011-07-30' 
GROUP BY HOUR(dateofissue)

Он даст час за день с определенного дня!