У меня есть этот запрос:
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;
, который успешно дал description_id
, он дает мне количество администраторов, которые используют это описание.Описание для администратора считается использованным до тех пор, пока в таблице admin_descriptions
имеется строка с description_id
, значением NOT NULL и valid_at
, более свежая, чем любая другая запись с NULL
.значение для этого 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'
Количество при запросе description_id = 1
будет равно 1. Это будет просто рассмотреть строку 3. Потому чтодаже если есть первая строка, в которой значение NOT NULL, есть строка 2, которая valid_at
более поздняя для того же admin_id
, а ее значение равно NULL.
Теперь я пытаюсь изменитьзапрос, чтобы я мог запросить его для нескольких description_ids
, и я не могу понять, как изменить запрос.Я хотел бы получить набор результатов, который выглядит следующим образом: description_id, count
.
Я пытался изменить внутренний запрос следующим образом:
select count(*) as num_valid_admins
from (select distinct on (ad.admin_id) ad.*
from admin_descriptions ad
where ad.description_id IN (x,y,z)
order by ad.admin_id, ad.valid_at desc
) ad
where ad.value is not null
GROUP BY ad.description_id
Но я не возвращаю счетdescription_id
.