как сжать последовательные повторяющиеся строки в Mysql? - PullRequest
1 голос
/ 16 мая 2011

В базе данных mysql, как я могу сжать все последовательные дубликаты в 1, сохраняя порядок в выбранном выводе?

данные:

id  fruit
----------
1   Apple
2   Banana
3   Banana
4   Banana
5   Apple
6   Mango
7   Mango
8   Apple

Вывод я хочу:

fruit
-------
Apple
Banana
Apple
Mango
Apple

Это очень легко сделать в unix с помощью команды uniq, но «отдельный» не так гибок. Идентификаторы не являются последовательными, и пробелы возможны. Я был упрощен в своем примере. Выбрать можно так:

данные:

id  fruit
----------
100  Apple
2    Banana
30   Banana
11   Banana
50   Apple
62   Mango
7    Mango
4    Apple

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Попробуйте это - при условии последовательных идентификаторов без пробелов.

SELECT T.fruit
FROM YOURTABLE T
LEFT JOIN YOURTABLE T2
ON T2.ID = T.ID + 1
WHERE T2.fruit <> T.fruit
OR T2.ID IS NULL
ORDER BY T.ID
0 голосов
/ 16 мая 2011

Использование:

  SELECT x.fruit
    FROM (SELECT t.fruit,
                 CASE 
                   WHEN @fruit <> t.fruit THEN @rownum := @rownum + 1
                   ELSE @rownum
                 END as rank
            FROM YOUR_TABLE t
            JOIN (SELECT @rownum := 0, @fruit := NULL) r
        ORDER BY t.id) x
GROUP BY x.fruit, x.rank
ORDER BY x.rank
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...