チケット、ticketThreads、users、および threadStatus テーブルをクエリする次の 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 |
次に行う必要があるのは、上記のクエリを編集して、チケット データベース内の各 threadId 値に対して最大の一意の値を選択できるようにすることです。
私は知ってMAX()
いGROUP BY
ますが、上記のクエリにそれらを取り込む方法を理解できません。
表の関連部分を以下に示します。
切符売場
ticketId | ticketUserId | threadId
-------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 1
チケットスレッド
threadId | lastMessage | threadStatus
-------------------------------
1 | 3 | 4
2 | 2 | 1
上記のすべてが明確で理にかなっていることを願っています