2

假设我有这张桌子:

id  |  name  
-------------
1   |  john  
2   |  steve
3   |  steve
4   |  john
5   |  steve

我只想要与前一行相比唯一的行,这些:

id  |  name  
-------------
1   |  john  
2   |  steve
4   |  john
5   |  steve

我可以通过使用这个查询来部分实现这一点:

SELECT *, (
    SELECT `name` FROM demotable WHERE id=t.id-1
) AS prevName FROM demotable AS t GROUP BY prevName ORDER BY id ASC

但是,当我使用具有多个 UNION 和其他内容的查询时,这会变得很复杂。有没有一种简单的方法可以做到这一点(比如 GROUP BY,但比更具体)?

4

1 回答 1

2

这应该可行,但我不知道它是否更简单:

select demotable.*
from demotable
left join demotable as prev on prev.id = demotable.id - 1
where demotable.name != prev.name
于 2011-03-06T11:28:03.173 回答