Функция вроде GROUP_CONCAT (которая поддерживает упорядочение), но возвращает только 1 результат? Или как MAX, но с порядком?

Есть ли функция, похожая на GROUP_CONCAT в том смысле, что она поддерживает ORDER BY, но возвращает только 1 результат?

Например, я хочу сделать что-то вроде этого:

GROUP_CONCAT(x ORDER BY y LIMIT 1)

MIN и MAX мне не подходят, потому что я заказываю через y вместо x.


Edit2: Найден другой способ написания запроса, который включает в себя подзапрос. Многие таблицы объединяются дважды, один раз для условий (в подзапросе) и один раз для получения значений для отображения, так как я не могу вытащить их из подзапроса.


person mpen    schedule 08.09.2011    source источник
comment
Вы должны опубликовать свое обновление в качестве ответа...   -  person Adriano Carneiro    schedule 08.09.2011
comment
Похоже, вы пытаетесь решить проблему greatest-n-per-group, которая часто возникает в Stack Overflow. Я добавил тег к вашему вопросу, пожалуйста, нажмите на него. На это отвечали много раз.   -  person Bill Karwin    schedule 08.09.2011
comment
Вы можете получить дополнительную помощь, если укажете, что именно вам нужно. Кажется, я не могу понять, для чего вы хотите это использовать, кроме стандартной группы, найти строку, которая принадлежит максимальной проблеме, которая обычно исправляется путем выбора максимума, а затем получения строки с этим максимумом... ( max может быть другой агрегатной функцией, конечно)   -  person Nanne    schedule 08.09.2011
comment
@ Адриан: Это неудовлетворительный ответ. Я ищу что-то лучше.   -  person mpen    schedule 08.09.2011
comment
@Nanne: это та же проблема, что и мой последний вопрос (stackoverflow.com/questions/7233757), за исключением того, что это решение перестало работать для меня. Если он присоединяется к неправильной программе, он может не соответствовать условиям where. Поэтому я попытался скопировать условия where в предложение on соединения программы, но не все из них применимы. У меня есть около 20 таких списков, и я хочу, чтобы схема (таблицы + соединения) была одинаковой для каждого из них, поэтому мне нужно только программно настроить условия where.   -  person mpen    schedule 08.09.2011
comment
@ajreal: Что ты имеешь в виду?   -  person mpen    schedule 09.09.2011
comment
групповое объединение с индексом подстроки   -  person ajreal    schedule 09.09.2011
comment
@Mark: Почему ответ на предыдущее решение перестал работать? Что вы изменили в запросе?   -  person ypercubeᵀᴹ    schedule 09.09.2011
comment
@ypercube: Хорошо, он не совсем перестал работать, он вообще никогда не работал должным образом. Будет работать в 99% сценариев, но было несколько случаев, когда он присоединялся к неправильной программе, и тогда клиент не соответствовал всем условиям, когда он должен был (если бы он выбрал другую программу для присоединения) . Реструктуризация таким образом, что все условия перемещаются в объединение программы, похоже, теперь работает.   -  person mpen    schedule 09.09.2011
comment
Да, любое дополнительное условие (о programs) должно быть добавлено в предложение подзапроса WHERE. Вы также можете добавить его в окружающий запрос, но это не обязательно.   -  person ypercubeᵀᴹ    schedule 10.09.2011


Ответы (1)


Просто нашел способ делать то, что хочу, но это не очень приятно:

SUBSTRING_INDEX(GROUP_CONCAT(x ORDER BY y),',',1)

И это делает предположение, что других запятых в x нет.

person mpen    schedule 09.09.2011