Почему я не могу просто сгруппировать по дате (startTime) здесь? - PullRequest
0 голосов
/ 13 марта 2020

В моей таблице есть поле даты / времени, которое называется startTime.

Я бы хотел получить следующий вывод:

select
YEAR(startTime),
MONTH(startTime),
DAY(startTime),
dayofmonth(startTime),
startTime,
...

Это нормально, и мне нужно сгруппировать только по startTime.

Однако для моего вывода я действительно интересует только часть даты startTime.

Поэтому я изменил свой вывод на

select
YEAR(startTime),
MONTH(startTime),
DAY(startTime),
dayofmonth(startTime),
DATE(startTime),
...

Когда я пытаюсь запустить это, SQL делает меня группой по году, месяцу , day, dayofmonth и date (startTime).

Кажется, это извращение функции date ()?

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

Любые идеи очень важны!

Мой код в настоящее время:

YEAR(startTime),
MONTH(startTime),
DAY(startTime),
dayofmonth(startTime),
date(startTime),
count(id)

from
bookings

group by 1, 2, 3, 4, 5

1 Ответ

0 голосов
/ 13 марта 2020

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

Например, если у вас есть startime в предложении select, а также в выражении group by мы получаем различные значения выбранных атрибутов - date, month, year и startTime для каждого уникального значения starttime. Но если вы удалите время начала из условия выбора, то для выбранных атрибутов больше не будет гарантировано, что они будут уникальными.

Рассмотрим 2 значения startTime 2020-03-12T01: 01: 01.000UT C и 2020-03-12T02: 02: 02.000UT C ожидается, что будет создано две строки, если мы сгруппируем по startTime (как два разных startTimes), но выбранные значения для года, месяца и даты будут одинаковыми в обеих этих строках (так как они отличаются только во времени часть) которая разбивает группу по контракту.

Следовательно, мы можем иметь только группу атрибутов в предложении select, которая ДОЛЖНА предоставлять различное значение для каждой комбинации атрибутов в предложении group by.

...