如何在Mysql中压缩连续的重复行?

时间:2011-05-15 22:18:57

标签: mysql sql

在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

使用uniq命令在unix中这是一件非常简单的事情,但“distinct”并不灵活。 ID不是顺序的,并且可能存在间隙。在我的例子中,我过于简单了。 选择可能是这样的:

数据:

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

2 个答案:

答案 0 :(得分:1)

试试这个 - 假设连续的ID没有间隙。

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

答案 1 :(得分:0)

使用:

  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