如何通过多个联接按日期时间获取最后一行的未分组数据



有票,它们总是包含一些注释(至少一个(和表来连接它们。所有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_author_id>td>t2c1
ticket_idcomment_countlast_atlast_text
974442220222-01-01 00:55:5522222t3c2
46223022022-01-01 00:33:3311111t1c2
49069412022-01-01 00:22:2222222

使用子查询检索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

请检查此urlhttps://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=b461286719332ec3592d40a246ae3bf6

最新更新