【发布时间】:2018-07-09 13:10:47
【问题描述】:
我正在尝试查找并删除紧随其后的 MySQL 行重复,而不是查找所有行,即使它们不是紧随其后。
SELECT DISTINCT(content) AS contentMsg, COUNT(*) AS cnt, `ticketId`,`date`
FROM ticketsReplies
WHERE username = 'X'
GROUP BY contentMsg, ticketId
HAVING cnt > 1
ORDER BY cnt DESC
这是我当前的代码。但是,如果一张票中只有两个相同的答案,而不是它们必须是一个接一个的 ID(如果您发送 POST 请求并且它失败并且您刷新等,则可能会发生这种情况),这会发现重复项。
我将如何找到彼此之间只有 1 个 ID 的那些。
所以找到例如1,2,3,4,5,6,7 而不是 1,3,9,11
例如如果你有
ID EMAIL
---------------------- --------------------
1 aaa
2 bbb
3 bbb
4 bbb
5 ddd
6 eee
7 aaa
8 aaa
9 bbb
如果你有这个,它应该找到以下 ID: 2,3,4 但不是 9,因为它不是直接在 4 之后,即使它是重复的。
它也应该找到 7,8 但不是 1,因为它们不是紧挨着的。
【问题讨论】:
-
请注意,DISTINCT 不是函数,而且它不太可能出现在聚合查询中(聚合函数内除外)。
-
除此之外,您的 GROUP BY 不是 ANSI 有效的,这意味着它将在 MySQL 服务器上失败,在 sql_mode 中启用了``ONLY_FULL_GROUP_BY`。它将在没有该 sql_mode 但将为 SELECT 中未在 GROUP BY 中命名的每个列名生成不可信数据,在这种情况下,这是列日期..
-
@Strawberry 我已经更新了我的 OP 以便更好地理解。