Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Достать только первую запись из некоторых групп записей, из остальных достать все / 5 сообщений из 5, страница 1 из 1
05.03.2015, 18:46:29
    #38896476
Skirmy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Достать только первую запись из некоторых групп записей, из остальных достать все
Здравствуйте!

Целый рабочий день сегодня убил, так и не смог понять, как же это сделать.
Есть запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT 
docentr_group_pupils.id_pupil as shriker_id, 
tutonica_lessons.lesson_date, 
tutonica_lessons.id_group,  
((SELECT TP.id FROM tutonica_plus AS TP WHERE (TP.date_declared = tutonica_lessons.lesson_date) AND (TP.id_group = tutonica_lessons.id_group) LIMIT 1) IS NOT NULL) AS did_the_lesson_even_happen, 
docentr_group.id_teacher as shriker2_id

FROM docentr_group_pupils
JOIN tutonica_lessons ON (tutonica_lessons.id_group = docentr_group_pupils.id_group)
JOIN docentr_group ON tutonica_lessons.id_group = docentr_group.id
LEFT JOIN tutonica_plus ON ((docentr_group_pupils.id_pupil = tutonica_plus.id_pupils) AND (tutonica_plus.date_declared = tutonica_lessons.lesson_date) AND (docentr_group_pupils.id_group = tutonica_plus.id_group))
WHERE (id_pupils IS NULL) AND (lesson_date > "2014-09-01") AND (lesson_date < NOW())

ORDER BY lesson_date, id_group, did_the_lesson_even_happen



Выдаёт:


Мне нужно, чтобы в каждой группе записей, у которой совпадает lesson_date и id_group, а также did_the_lesson_even_happen равен нулю , выводилась только одна строка (любая, в принципе).

То есть у вот таких вот групп:

Делалось вот так:


Записи, у которых флаг did_the_lesson_even_happen равен единице, должны выводиться без изменений, то есть все.
С ORDER BY можно делать что угодно, он мне не принципиален. Я его таким выставил для более удобной демонстрации задачи.
Я пытался играться с GROUP BY, но эта беспощадная штука группирует и записи с did_the_lesson_even_happen = 1, то есть, например, вот эти две группирует тоже:

А она не должна вообще их трогать (did_the_lesson_even_happen = 1).

Заранее прошу прощения за безумные paint-скиллы, надеюсь, достаточно понятно всё объяснил и нарисовал. Буду очень благодарен любой помощи.
...
Рейтинг: 0 / 0
05.03.2015, 23:57:43
    #38896692
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Достать только первую запись из некоторых групп записей, из остальных достать все
Union двух подзапросов?
...
Рейтинг: 0 / 0
06.03.2015, 09:23:07
    #38896829
Skirmy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Достать только первую запись из некоторых групп записей, из остальных достать все
Можно и юнион, но тогда СУБД выполнит двойную работу, я-то хотел, наоборот, снизить вычислительную сложность.

Спасибо за ответ, у нас тут работа по этой штуке, похоже, сейчас будет приостановлена, так что задачу можно не решать.
...
Рейтинг: 0 / 0
06.03.2015, 09:26:28
    #38896831
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Достать только первую запись из некоторых групп записей, из остальных достать все
SkirmyСУБД выполнит двойную работу, я-то хотел, наоборот, снизить вычислительную сложность.
Насчёт двойной - сильно вряд ли.
Насчёт снизить - а вот ТЕБЕ оно зачем?
...
Рейтинг: 0 / 0
06.03.2015, 10:29:09
    #38896901
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Достать только первую запись из некоторых групп записей, из остальных достать все
SkirmyМожно и юнион, но тогда СУБД выполнит двойную работу, я-то хотел, наоборот, снизить вычислительную сложность.

Спасибо за ответ, у нас тут работа по этой штуке, похоже, сейчас будет приостановлена, так что задачу можно не решать.

не понял, если у тебя задача двойная то как можно не делая двойной работы её решить.

у тебя, выбрать, делать, если 0/1 - цепочка действий 1 / цепочка действий 2

либо юнион как сказали, либо через переменные.

тоесть делаешь выборку всех и сортируя, а потом переменными отфильтруешь. но сдаёться мне , для субд проще будет через юнион, чем всю эту муть сортировать, и потом отфильтровывать.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Достать только первую запись из некоторых групп записей, из остальных достать все / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]