Наличие таблицы с столбцом типа: 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)
Он даст час за день с определенного дня!