如何将列添加到重复查询?
How to add column to duplicated query?
我有一个名为 logs
的 table,其中包含以下列:
id - message - source - created_at - version - ...(another columns here)
我想计算在 logs
中重复的 message
并得到查询的三列,它们是
source - created_at - version
注:
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;
我有一个名为 logs
的 table,其中包含以下列:
id - message - source - created_at - version - ...(another columns here)
我想计算在 logs
中重复的 message
并得到查询的三列,它们是
source - created_at - version
注:
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;