Как сохранить значение важного столбца в GROUP BY - PullRequest
0 голосов
/ 22 сентября 2011

Вот пример набора данных, который у меня есть:

id | messageread | timestamp
 1 |       'yes' |       999
 1 |       'yes' |         0
 1 |        'no' |         0

Я делаю так:

SELECT *
FROM nvm
GROUP BY id

Вы заметите, что набор данных уже ORDER BY timestamp DESC

Как и положено, MySQL возвращает первую строку.

Я бы хотел, чтобы MySQL возвращал первую строку, но с messageread='no' IF messageread='no' в одной из сгруппированных строк, независимо от того, является ли обычно возвращенная строка 'yes' 'no'

Это возможно с MySQL? Я обещал сделать как можно больше с MySQL, а не с PHP :-) Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Чтобы убедиться, что все строки из одного столбца, выполните:

SELECT * FROM table1 t1 
LEFT JOIN table1 t2 ON ((t1.messageread, t1.id) < (t2.messageread, t2.id))
WHERE T2.ID IS NULL

Это выберет минимальную или максимальную строку из таблицы1. И все столбцы будут из одной строки.
Если это не сработает, вам нужно изменить < на >, здесь поздно, и я не могу проверить запрос, но он должен выполнить свою работу.

Предупреждение, антипаттерн впереди
По всему этому пахнет тухлыми яйцами, но если вы хотите быстро смешать и сочетать, сделайте:

SELECT id, min(messageread), timestamp as random_timestamp
FROM table1
GROUP BY id
0 голосов
/ 22 сентября 2011

Вам нужно будет сделать оператор CASE вместе с ЛЮБОЙ.

SELECT
    CASE WHEN 'no' = ANY(SELECT messageread FROM nvm t2 WHEN t2.id = t1.id)
        THEN 'no'
        ELSE 'yes'
        AS messageread,
    timestamp,
FROM nvm t1
GROUP BY t1.id

Примечание: вы в основном получаете случайную временную метку здесь, хотите MAX (временную метку) или что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...