MySQL сортирует упорядоченные сгруппированные данные - PullRequest
0 голосов
/ 07 января 2019

У меня есть две таблицы: ticket и ticketRules, и у меня есть такой запрос:

SELECT * FROM (
    SELECT * FROM ticketRules
    ORDER BY
        date DESC,
        time DESC
) AS myTicketRules
GROUP BY ticketId
ORDER BY ticketId ASC

Первый Order By (тот, что в подзапросе) сортирует данные по дате и времени, поэтому последний тикетр всегда первый. Я группирую результаты по ticketId, поэтому я получил только последний ticketRule для каждого билета. Теперь я хочу отсортировать результаты по тикету, но если я это сделаю, это повлияет и на первый результат, и у тикетов уже нет последнего тикрула, а тот с наименьшим идентификатором, потому что его заказывает ticketId.

Как можно отсортировать только видимые записи после их группировки?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Есть несколько проблем с вашим запросом:

  • должно быть только одно предложение ORDER BY (которое должно быть помещено во внешний запрос)
  • GROUP BY не делает то, что вы думаете (то есть не дает доступа к последнему билету)

Если вы пытаетесь извлечь полную последнюю запись для каждого ticketId, упорядоченного по ticketId, вы можете использовать коррелированный подзапрос следующим образом:

SELECT 
    t.*
FROM
    ticketrule t
WHERE
    t.date = (
        SELECT MAX(date)
        FROM ticketrule
        WHERE ticketId = t.ticketId 
    )
ORDER BY t.ticketId
0 голосов
/ 07 января 2019

не следует использовать группу без функции агрегирования, а для получения последнего значения можно использовать функцию агрегирования как max( )

select  ticketId, max(date)
from ticketRules 
grouo by ticketId
...