在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
答案 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