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

How to get non grouped data of last row by datetime with multiple joins?

有门票,它们总是包含一些评论(至少一个)和 table 来连接它们。所有 PK 都是数字但随机的,因此,时间线基于 ticket/comment table.

的 DATETIME 字段

我需要列出所有 LAST(基于日期时间字段)评论数据(id、日期、作者、文本)和聚合字段(对票有多少评论)的门票(id、作者)。


准备好的数据库 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设置,但结果会导致数据错误。

预期数据:

ticket_id comment_count last_at last_author_id last_text
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

我得到的:

ticket_id comment_count last_at last_author_id last_text
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_idlast_at 之外的所有字段的差异 – 都是错误的。

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