Не получается сгруппировать запрос по дате, т.к. часы и минуты отличаются
Необходимо сгруппировать количество тренеров по дням в таблице:
CREATE TABLE lesson
( lesson_id number(5) NOT NULL,
lesson_section_id number(5) NOT NULL,
lesson_coach_id number(5) NOT NULL,
lesson_room number(5) NOT NULL,
lesson_start_date date NOT NULL,
lesson_end_date date NOT NULL,
lesson_cost number(5),
FOREIGN KEY (lesson_section_id) REFERENCES sections(section_id),
FOREIGN KEY (lesson_coach_id) REFERENCES coachs(coach_id),
CONSTRAINT lesson_pk PRIMARY KEY (lesson_id)
);
Сделал такой запрос:
SELECT COUNT(LESSON_COACH_ID),lesson_start_date FROM LESSON GROUP BY lesson_start_date;
Проблема в том, что в поле lesson_start_date хранится не только дата, но и время начала занятия. То есть, результатом такого запроса может стать:
COUNT: 1, LESSON_START_DATE: 16.04.2020 12:00
COUNT: 1, LESSON_START_DATE: 16.04.2020 13:00
COUNT: 1, LESSON_START_DATE: 16.04.2020 14:00
Но мне нужно сгруппировать данные именно по дате. Пытался сделать через select to_char(lesson_start_date,'dd.mm.yyyy') from dual, как оказалось, в выражении GROUP BY нельзя использовать подзапросы.
Ответы (1 шт):
- Как усечь дату в ORACLE до определенного значения
Делать это с помощью to_char можно, но очень не правильно. Есть замечательная функция TRUNC - без параметров она как раз округляет до дня.
Большой список функций с описанием (причем и для других БД) можно посмотреть здесь, полный список конечно в доке ORACLE.
- Что можно использовать в выражении
GROUP BY
Подзапросы нельзя использовать, но они и не нужны, т.к. можно сразу использовать сами функции как штатные, так и пользовательские.
select
count(l.lesson_coach_id),
trunc(l.lesson_start_date) lesson_date
from lesson l
group by trunc(l.lesson_start_date)