我有这个查询,工作正常
SELECT count(*) cnt, b.message_lot_num,
t.name AS trigger_name, tm.name AS template_name
FROM messages b
LEFT JOIN triggers t ON t.trigger_id = b.trigger_id
LEFT JOIN templates tm ON tm.template_id = t.template_id
WHERE b.account_id = $1
AND sms_direction = 'out'
GROUP BY message_lot_num, t.name, tm.name
ORDER BY message_lot_num DESC LIMIT $2
我想做的是返回每个组的最高记录。
这些组中的每一个都是message_lot_num共享相同的消息(但由于recpt名称而略有不同,所以我不能在组中添加它)。所以我正在尝试使用该组显示示例消息
可能吗?
感谢您的帮助
答案 0 :(得分:1)
您希望获得有关哪个列或数量的最高记录?在不知道如何订购每个团体的情况下甚至提出这个问题是没有意义的。我假设您想要具有最高计数的记录:
WITH cte AS (
SELECT
COUNT(*) cnt,
b.message_lot_num,
t.name AS trigger_name
tm.name AS template_name,
ROW_NUMBER() OVER (PARTITION BY message_lot_num, t.name, tm.name
ORDER BY COUNT(*) DESC) rn -- you may order by any column here
FROM messages b
LEFT JOIN triggers t
ON t.trigger_id = b.trigger_id
LEFT JOIN templates tm
ON tm.template_id = t.template_id
WHERE
b.account_id = $1 AND
sms_direction = 'out'
GROUP BY
message_lot_num, t.name, tm.name
)
SELECT
cnt, message_lot_num, trigger_name, template_name
FROM cte
WHERE rn = 1
ORDER BY
message_lot_num DESC;
如上文评论中所述,您可以通过调用ROW_NUMBER
的任意列进行排序。我选择了伯爵,因为这似乎是最有意义的。