MySQL查询以获取多个表上一列的第一个唯一值

MySQL查询以获取多个表上一列的第一个唯一值,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,我有以下SQL查询,用于查询我的票证、票证线程、用户和线程状态表: SELECT tickets.threadId, ticketThreads.threadSubject, tickets.ticketCreatedDate, ticketThreads.threadCreatedDate, threadStatus.threadStatus, users.name FROM tickets INNER JOIN ticketThreads ON tickets.threadId =

我有以下SQL查询,用于查询我的票证、票证线程、用户和线程状态表:

SELECT tickets.threadId, ticketThreads.threadSubject, tickets.ticketCreatedDate,  ticketThreads.threadCreatedDate, threadStatus.threadStatus, users.name
FROM 
tickets 
INNER JOIN 
ticketThreads
ON
tickets.threadId = ticketThreads.threadId
INNER JOIN
threadStatus 
ON
ticketThreads.threadStatus = threadStatus.id
INNER JOIN
users
ON
users.id = ticketThreads.threadUserId
WHERE
tickets.ticketId = ticketThreads.lastMessage
AND 
ticketThreads.threadStatus != 3
ORDER BY
tickets.ticketCreatedDate
DESC
此返回内容的简略版本为:

threadId | 
----------
1        |
2        |
这很好,这也是我所期望的,但是为了稍微清理代码和数据库,我需要删除ticketThreads.lastMessage列

如果删除行
WHERE tickets.ticketId=ticketThreads.lastMessage
,则这是返回内容的节略版本:

threadId | 
----------
1        |
2        |
1        |
然后我需要做的是编辑上面的查询,使我能够为tickets数据库中的每个threadId值选择最高的唯一值

我知道
MAX()
groupby
的相关信息,但我不知道如何将它们纳入上面的查询中

各表的相关部分如下所示:

门票

ticketId | ticketUserId | threadId 
-------------------------------
1        | 1            | 1
2        | 1            | 2
3        | 1            | 1
threadId | lastMessage  | threadStatus
-------------------------------
1        | 3            | 4
2        | 2            | 1
ticketThreads

ticketId | ticketUserId | threadId 
-------------------------------
1        | 1            | 1
2        | 1            | 2
3        | 1            | 1
threadId | lastMessage  | threadStatus
-------------------------------
1        | 3            | 4
2        | 2            | 1

我希望以上所有内容都很清楚,并且有意义

因此您需要每个线程具有最高id的
票据
?你的问题其实很简单。不需要任何子查询。基本上,您有两个选项,这两个选项的性能都应该比您的查询好得多,第二个选项的速度更快(请在数据库中公布实际的持续时间!):

1.符合标准的查询,但速度较慢:
在这里,我们使用辅助mysql变量
@prev_thread
对有序连接的数据执行一次扫描,以仅过滤每个线程的第一个(按给定顺序)票证(票证TID最高的那个)。

这个问题(及其变体)谢谢你提供的有用的答案:-)我已经阅读了这里的许多答案,我在这里提问是我的最后一点,因为我发现很难在我的示例中实现。