[英]How to fetch the information from latest record in MySQL (MardiaDB) dependent table?
我有一個帶有 2 個主表的 MySQL 數據庫(在某些服務器上也用作 MariaDB)。 一個是tickets
,另一個是ticket_contents
,如下所示:
Tickets
+----+---------+-------------+
|id + subject | Create date |
+----+---------+-------------+
|1 | Ticket1 | 2020-05-24 |
+----+---------+-------------+
|2 | Ticket2 | 2020-05-25 |
+----+---------+-------------+
Ticket Contents
+----+-----------+---------------------+-------------+
|id + ticket_id | update date_time | content |
+----+-----------+---------------------+-------------+
|1 | 1 | 2020-05-24 08:30:15 | msg1 |
+----+-----------+---------------------+-------------+
|1 | 2 | 2020-05-25 10:05:15 | msg2 |
+----+-----------+---------------------+-------------+
|1 | 1 | 2020-05-25 12:15:00 | msg3 |
+----+-----------+---------------------+-------------+
我需要的是具有最新內容記錄時間的門票列表以及整張門票的最新更新順序:
+----------+----------+---------------------+
|ticket_id |subject |last_update |
+----------+---_------+---------------------+
|1 | Ticket1 | 2020-05-25 12:15:00 |
+----------+----------+---------------------+
|2 | Ticket2 | 2020-05-25 10:05:15 |
+----------+----------+---------------------+
這是我編寫的代碼,但它沒有提供正確的最新子記錄信息。
SELECT t.id, c.date_time FROM tickets t JOIN
(SELECT ticket_id, date_time FROM tickets_contents GROUP BY ticket_id) c on t.id = c.ticket_id
group by t.id order by date_time desc
你能幫我糾正我的 SQL 代碼嗎?
你幾乎是對的,你必須使用 MAX 來獲得 GROUP BY 的最高日期
SELECT t.id,t.subject,t2.maxtime FROM Tickets t INNER JOIN (SELECT MAX(`update date_time`) maxtime,ticket_id FROM `Ticket Contents` GROUP BY ticket_id) t2 ON t.id = t2.ticket_id
編號 | 主題 | 最大時間 -: |:------ |:----------------- 1 | 票1 | 2020-05-25 12:15:00 2 | 票2 | 2020-05-25 10:05:15
db<> 在這里擺弄
如果您的 DBMS 版本是 10.2+,那么 window 函數(例如RANK()
可能會用於確定最新更新的票證:
SELECT tt.id AS ticket_id, tt.subject, tt.date_time AS last_update
FROM
(
SELECT t.*, tc.date_time,
RANK() OVER (PARTITION BY tc.ticket_id ORDER BY tc.date_time DESC ) AS rnk
FROM tickets t
JOIN tickets_contents tc
ON tc.ticket_id = t.id
) tt
WHERE rnk = 1
ORDER BY ticket_id;
其中PARTITION BY
代表對每個相關列進行分組(在這種情況下: ticket_id ),並且ORDER BY... DESC
用於過濾最后一條記錄(在這種情況下: latest )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.