我有一个名为admin_descriptions
的表,其中包含以下列:
description_id
,value
,admin_id
,valid_at
表admins
包含以下列:
state
我想要一个给出description_id
的查询,它会为我提供使用该描述的活动管理员的计数。只要admin_descriptions
表格中有一行description_id
,NOT NULL value
和{{1},就会将管理员的说明视为已使用对于valid_at
具有NULL value
的任何其他条目,它最新。
所以,示例数据:
description_id
查询Row 1:
description_id: 1
value: 'foo'
admin_id: 2
valid_at: '2010-01-10'
Row 2:
description_id: 1
value: NULL
admin_id: 2
valid_at: '2012-01-10'
Row 2:
description_id: 1
value: 'some value'
admin_id: 4
valid_at: '2014-01-10'
时的计数为1.它只考虑第3行。因为即使存在值为NOT NULL的第一行,也存在第2行,其中valid_at是最新的admin_id及其description_id = 1
为NULL。
我可以在不考虑value
via:
valid_at
如何修改此查询以考虑每个admin_id / description_id组合的SELECT COUNT(DISTINCT(ad.id)) AS COUNT
FROM admin_descriptions ad
JOIN admins ON admins.id = ad.admin_id
WHERE ad.description_id = 1
AND admins.state = 'active'
?
答案 0 :(得分:0)
答案 1 :(得分:0)
我会使用distinct on
获取最新的管理员说明,然后从那里进行汇总:
select count(*) as num_valid_admins
from (select distinct on (ad.admin_id) ad.*
from admin_descriptions ad
where ad.description_id = XXX
order by ad.admin_id, ad.valid_at desc
) ad
where ad.value is not null;