有票,他們總是包含一些評論(至少一個)和表格來連接他們。所有 PK 都是數字但隨機的,因此,時間線基于工單/評論表的 DATETIME 欄位。
我需要列出所有 LAST(基于日期時間欄位)評論資料(id、日期、作者、文本)和聚合欄位(對票有多少評論)的票證(id、作者)串列。
準備好的 DB Fiddle 在這里:https ://www.db-fiddle.com/f/3PUfo2t4JkEMSA3Skw4sua/1
此處的原始 SQL 查詢:
SELECT
tc.ticket_id AS ticket_id
, COUNT(c.id) AS comment_count
, MAX(c.created_at) AS last_at
, c.author_id AS last_author_id
, c.text AS last_text
FROM `ticket_comment` AS tc
JOIN `comment` AS c ON c.id = tc.comment_id
GROUP BY tc.ticket_id
ORDER BY last_at DESC
我有“ER_WRONG_FIELD_WITH_GROUP”錯誤,我理解它為什么會發生,但不知道如何修復它。
我試圖關閉ONLY_FULL_GROUP_BY設定,但結果會導致資料錯誤。
預期資料:
| 票號 | 評論計數 | last_at | last_author_id | 最后一個文本 |
|---|---|---|---|---|
| 974442 | 2 | 2022-01-01 00:55:55 | 22222 | t3c2 |
| 462230 | 2 | 2022-01-01 00:33:33 | 11111 | t1c2 |
| 490694 | 1 | 2022-01-01 00:22:22 | 22222 | t2c1 |
我有什么:
| 票號 | 評論計數 | last_at | last_author_id | 最后一個文本 |
|---|---|---|---|---|
| 974442 | 2 | 2022-01-01 00:55:55 | 11111 | t3c1 |
| 462230 | 2 | 2022-01-01 00:33:33 | 11111 | t1c2 |
| 490694 | 1 | 2022-01-01 00:22:22 | 22222 | t2c1 |
注意所有欄位的差異,除了ticket_id和last_at- 都錯了。
uj5u.com熱心網友回復:
使用子查詢來檢索 ticket_id 明智的評論計數,以及使用 ROW_NUMBER() 根據創建日期 DESC 來最后發布的評論。
-- MariaDB (10.4)
SELECT p.ticket_id, p.comment_count
, p.created_at last_at
, p.author_id last_author_id
, p.text last_date
FROM (SELECT *
, COUNT(c.id) OVER(PARTITION BY ticket_id) comment_count
, ROW_NUMBER() OVER (PARTITION BY ticket_id ORDER BY c.created_at DESC) r
FROM ticket_comment t
INNER JOIN comment c
ON c.id = t.comment_id) p
WHERE p.r = 1
ORDER BY p.comment_count DESC
, p.ticket_id DESC
請檢查此網址https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=b461286719332ec3592d40a246ae3bf6
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449599.html
