Вы можете использовать оконные функции для подсчета количества строк с датами, а затем сравнения с количеством стран:
SELECT c.*
FROM (SELECT c.*, COUNT(count) over (partition by date) as num_countries_on_date
FROM countries c
) c
WHERE num_countries_on_date = (SELECT COUNT(DISTINCT c2.country) FROM countries c2);
Здесь - это скрипт db <>.
Если вы хотите сгенерировать данные для диапазона дат - своего рода противоположная проблема - вы можете использовать CROSS JOIN
для генерации строк, LEFT JOIN
для ввода данных и COALESCE()
чтобы превратить NULL
в 0
:
SELECT c.country, d.date, coalesce(co.count, 0) as count
FROM (SELECT DISTINCT country FROM countries) c CROSS JOIN
generate_series('2020-05-26'::date, '2020-05-27'::date, interval '1 day') d(date) LEFT JOIN
countries co
ON co.country = c.country AND co.date = d.date;