SELECT group_name,teacher,datetime
FROM (
SELECT datetime,groups.name AS group_name,users.name AS teacher
FROM study_process,students,groups,users
WHERE groups.id = students.group
AND students.id = study_process.student_id
AND users.id = groups.owner
ORDER BY groups.name,datetime DESC
) AS tmp
GROUP BY group_name
WITH Summary
AS
{
SELECT SP.datetime, G.name AS group_name, U.name AS teacher
FROM study_process SP
INNER JOIN students S ON SP.student_id = S.id
INNER JOIN groups G ON S.group = G.id -- Наверное, group_id? Определитесь со стилем именования.INNER JOIN users U ON U.id = G.owner -- owner_user_id?
}
SELECT DISTINCT S.group_name, S.teacher, S.datetime -- ??? Что получить-то надо?FROM Summary S
ORDER BY S.group_name, S.datetime DESC
Здравствуйте, Фукерман, Вы писали:
Ф>а без join-ов нельзя ?
Можно! Есть ещё подзапросы и IN, но их понять порой труднее. :-)
Ф>не понимаю я их
Чо нипонимаешь-то? Давай растолкуем, для этого ж собрались вроде... Я вот ложку с вилкой когдато-то не понимал, но научился же и теперь без неё никак.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
1) вложенный запрос не нужен
2) ордер бай тоже не нужен
3) надеюсь, автор идеи, позволяющей в МайСКЛ выводить в селекте поля, не указанные в группировке, будет гореть в аду.
Здравствуйте, avpavlov, Вы писали:
A>Здравствуйте, Фукерман, Вы писали:
A>1) вложенный запрос не нужен A>2) ордер бай тоже не нужен A>3) надеюсь, автор идеи, позволяющей в МайСКЛ выводить в селекте поля, не указанные в группировке, будет гореть в аду.
1 — вложенный запрос потому, что мне сначала нужно отсортировать, а потом сгруппировать, а синтаксис этого сделать не позволяет
2 — как же не нужен, когда мне по нему сортировать надо ?
3 — гм, гм ...
A>>1) вложенный запрос не нужен A>>2) ордер бай тоже не нужен A>>3) надеюсь, автор идеи, позволяющей в МайСКЛ выводить в селекте поля, не указанные в группировке, будет гореть в аду.
Ф>1 — вложенный запрос потому, что мне сначала нужно отсортировать, а потом сгруппировать, а синтаксис этого сделать не позволяет
При группировке сервер не обязан сохранять какой-либо порядок строк (если после группировки не указан ордер бай). Если тебе что-то там выводится сортированным, то это вполне может быть особенностью конкретного плана выполнения запроса или особенностью конкретной версии МайСКЛ.
Ф>2 — как же не нужен, когда мне по нему сортировать надо ?
не нужен, потому что он гарантированно действует только на вложенный запрос. А воздействие сортировки на внешний запрос — это просто сайд-эффект, которыйй может исчезнуть в любое время.
вот так д.б. чтобы не зависеть от сайд-эффектов и особенностей МайСКЛ
SELECT max(datetime),groups.name AS group_name,max(users.name) AS teacher
FROM study_process,students,groups,users
WHERE groups.id = students.group
AND students.id = study_process.student_id
AND users.id = groups.owner
group by groups.name
ORDER BY groups.name
On 12.01.2011 21:00, Фукерман wrote:
> 1 — вложенный запрос потому, что мне сначала нужно отсортировать, а потом > сгруппировать, а синтаксис этого сделать не позволяет
Предварительная сортировка перед группировкой никак не меняет
результат группировки.
И в SQL вообще нет "сначала" и "потом". Это язык запросов, а не
язык программирования.
> 2 — как же не нужен, когда мне по нему сортировать надо ?
Если уберёшь сортировку, подзапрос будет не нужен. Если нужна
сортировка, её можно и в основной запрос вставить. Подзапрос для этого
не нужен.
> 3 — гм, гм ...
3-го я сразу не заметил... Тебе вообще что нужно-то ?
GROUP BY без единой агрегирующей функции -- это неправильно.
Надо DISTINCT использовать.
Плюс поля teacher, datetime у тебя будут содержать всё, что
угодно. Что твоя СУБД это позволяет делать -- это ОЧЕНЬ ПЛОХО,
это я согласен. СУБД какая ?
MZ>Плюс поля teacher, datetime у тебя будут содержать всё, что MZ>угодно. Что твоя СУБД это позволяет делать -- это ОЧЕНЬ ПЛОХО, MZ>это я согласен. СУБД какая ?
200% это МайСКЛ (я в других этого не встречал). Руки бы оторвал за такие "фичи". Случайно пропускаешь поле в груп бай (но оно есть в селекте) и всё молчком работает с подставлением рандомного значения
На тестовых данных по закону подлости оно (естественно) работает как надо, всплывает уже потом в продакшн. Всплывает (тоже естественно) рандомным образом — happy debugging!
Здравствуйте, avpavlov, Вы писали:
A>200% это МайСКЛ (я в других этого не встречал). Руки бы оторвал за такие "фичи". Случайно пропускаешь поле в груп бай (но оно есть в селекте) и всё молчком работает с подставлением рандомного значения
А мне этот запрос очень напоминает VFP. Ставлю $10. Там в версиях до 7й включительно та же проблема с Group by.