В Oracle, как мне получить список уникальных сайтов, где они были отобраны за X лет и имеют хотя бы одну точку данных каждый год?Нам нужно это, чтобы определить, какие сайты использовать для долгосрочного анализа тенденций.Я смог выбрать список отдельных сайтов, где первый образец был обнаружен более 36 лет назад, но не уверен, как мне поступить, чтобы каждый год иметь хотя бы одну точку данных.Я чувствую, что выполнение COUNT в течение года может быть способом сделать это, но я не уверен в точном языке, чтобы это сделать.
Вот пример таблицы (которая содержит первые точки данных моего большего набора данных).).Данные для них сохраняются до сегодняшнего дня.
drop table site_trends;
create table site_trends
(
site_id VARCHAR(30),
date_time DATE,
ANC VARCHAR(30)
);
insert into site_trends values('DR01', (TO_DATE('11/2/1979', 'mm/dd/yyyy')), 20.77);
insert into site_trends values('WR02', (TO_DATE('11/2/1979', 'mm/dd/yyyy')), 40.97);
insert into site_trends values('DR01', (TO_DATE('11/26/1980', 'mm/dd/yyyy')), 10.67);
insert into site_trends values('WR02', (TO_DATE('11/26/1980', 'mm/dd/yyyy')), 43.5);
insert into site_trends values('DR01', (TO_DATE('11/28/1981', 'mm/dd/yyyy')), 45.1);
insert into site_trends values('WR02', (TO_DATE('11/28/1981', 'mm/dd/yyyy')), 22.87);
Вот код, который добавляет разницу в годах от сегодняшней даты к дате, отобранной для любых сайтов, отобранных более 39 лет назад.Я бы использовал DISTINCT (site_id), чтобы предоставить мне список только site_id, но это показывает, как это работает.Теперь мне просто нужно составить условие, согласно которому каждый год необходимо иметь одну точку данных на сайт.
SELECT * FROM
(SELECT site_id, date_time, ANC,
TO_CHAR(current_timestamp, 'yyyy') - TO_CHAR(date_time, 'yyyy') AS diff_year
FROM site_trends)
WHERE diff_year > 38
;