如何将列添加到重复查询?

How to add column to duplicated query?

我有一个名为 logs 的 table,其中包含以下列:

id - message - source - created_at - version - ...(another columns here)

我想计算在 logs 中重复的 message 并得到查询的三列,它们是

source - created_at - version

注:

我的错误查询:

SELECT
    MESSAGE,
    SOURCE,
--  VERSION,
    COUNT(id)
FROM
    logs
WHERE
    LEVEL = 'debug'
GROUP BY
    MESSAGE,
    SOURCE
--  VERSION
HAVING
    COUNT(id) > 1
ORDER BY
    COUNT(id)
    DESC;

结果是我得到了错误的计数,因为 version 的值在所有行中都不相同!

那么source - created_at - version如何得到重复消息的数量

当您需要最后一个版本时,创建一个版本数组并按时间戳对它们进行排序。完成后,选择第一个:

SELECT
    MESSAGE,
    SOURCE,
    MAX(created_at),
    (ARRAY_AGG(VERSION ORDER BY created_at DESC))[1] AS last_version, -- use an ORDER BY
    COUNT(id)
FROM
    logs
WHERE
    LEVEL = 'debug'
GROUP BY
    MESSAGE,
    SOURCE
HAVING
    COUNT(id) > 1
ORDER BY
    COUNT(id) DESC;