Запрос Postgresql для извлечения записей, в которых имеется 365 показаний за разные годы в поле даты - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть набор данных, как показано ниже, где мой запрос должен возвращать только значения, если есть 365 показаний для каждого отдельного года (мне нужно убедиться, что у меня есть записи полного года) для каждой станции в поле native_id:

native_id                          datestamp               val 
charachter varying(50)                date              double precision
------------------------------------------------------------------------
08GD008                             2017-01-11              1.14
08GE002                             2017-01-11              88.67
08MC040                             2017-05-07              4.61
08FB006                             2017-01-11              13.70       
08FC003                             2017-01-11               37
08LF002                             2017-01-11               2.5 

Вот что я мог придумать, но это не работает:

SELECT * FROM TABLE 
WHERE COUNT DISTINCT (EXTRACT year FROM "datestamp" = 365)

1 Ответ

0 голосов
/ 09 ноября 2018

Это сложнее, чем вы думаете, из-за високосных лет. Предполагая, что дубликатов нет, вы можете использовать арифметику даты:

SELECT native_id, EXTRACT(year FROM datestamp) as yyyy
FROM TABLE 
GROUP BY native_id, yyyy
HAVING COUNT(*) = MAKE_DATE(EXTRACT(year FROM datestamp)::int + 1, 1, 1) - MAKE_DATE(EXTRACT(year FROM datestamp)::int, 1, 1);

Если есть дубликаты, используйте COUNT(DISTINCT). Однако это более дорого с точки зрения производительности, поэтому не используйте DISTINCT, если не нужно.

Затем вы можете получить исходные данные, выполнив:

SELECT t.*
FROM table t
WHERE (native_id, EXTRACT(year FROM datestamp)::int) IN
        (SELECT native_id, EXTRACT(year FROM datestamp)::int as yyyy
         FROM TABLE 
         GROUP BY native_id, yyyy
         HAVING COUNT(*) = MAKE_DATE(EXTRACT(year FROM datestamp)::int + 1, 1, 1) - MAKE_DATE(EXTRACT(year FROM datestamp)::int, 1, 1)
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...