Sql 上次关联记录具有负属性的计数
我有两个表,Sql 上次关联记录具有负属性的计数,sql,postgresql,aggregate-functions,greatest-n-per-group,Sql,Postgresql,Aggregate Functions,Greatest N Per Group,我有两个表,conversation和message(一个会话有许多消息) 我想计算最后一个(按消息排序。在处创建)消息的读取属性为假的对话数,以获得所述计数: SELECT count(*) AS msg_ct FROM ( SELECT DISTINCT ON (conversation_id) * FROM messages ORDER BY conversation_id, created_at DESC ) sub WHERE NOT read; 您根
conversation
和message
(一个会话有许多消息)
我想计算最后一个(按
消息排序。在
处创建)消息的读取
属性为假
的对话数,以获得所述计数:
SELECT count(*) AS msg_ct
FROM (
SELECT DISTINCT ON (conversation_id) *
FROM messages
ORDER BY conversation_id, created_at DESC
) sub
WHERE NOT read;
您根本不需要在此处包含父表conversation
子查询返回每个会话的最后一行(),该行由消息排序。在“
”处创建。此处的详细信息:
外部查询统计
read
为FALSE
的查询
备选方案包括:
对于大桌子来说可能更快。您必须使用进行测试。嗯:找到最后一条消息(每个会话\u id),并检查每个会话的read=false吗?@VladKhomich:添加了一个alt版本。@Mihai:。
SELECT count(*) AS msg_ct
FROM (
SELECT DISTINCT ON (conversation_id) *
FROM messages
ORDER BY conversation_id, created_at DESC
) sub
WHERE NOT read;
SELECT count(*) AS msg_ct
FROM messages m
WHERE NOT read
AND NOT EXISTS (
SELECT 1
FROM messages m1
WHERE m1.conversation_id = m.conversation_id
AND m1.created_at > m.created_at
);