在 Oracle 中,我如何获得一个独特站点的列表,这些站点已经被采样了 X 年?
In Oracle, how do I get a list of unique sites where they have been sampled for X number of years?
在 Oracle 中,我如何获得一份独特网站的列表,这些网站已经被抽样了 X 年并且每年至少有一个数据点?我们需要它来确定将哪些站点用于长期趋势分析。我已经能够 select 列出第一个样本发生在 36 年前的不同站点,但不确定我将如何确保每年至少有一个数据点。我感觉一年多做一次 COUNT 可能是一种方法,但不确定完成这项工作的确切语言。
这是示例 table(其中包含我的较大数据集的第一个数据点)。这些数据一直持续到今天。
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
;
可能有很多方法可以做到这一点。我只是按 site_id 和年份分组并进行计数。
select * from (
select site_id,
extract(year from sysdate) - extract(year from date_time) as diff_year,
count(1) as num_years
from site_trends
group by site_id, extract(year from date_time)
) where diff_year > 38 and num_years = diff_year;
在 Oracle 中,我如何获得一份独特网站的列表,这些网站已经被抽样了 X 年并且每年至少有一个数据点?我们需要它来确定将哪些站点用于长期趋势分析。我已经能够 select 列出第一个样本发生在 36 年前的不同站点,但不确定我将如何确保每年至少有一个数据点。我感觉一年多做一次 COUNT 可能是一种方法,但不确定完成这项工作的确切语言。
这是示例 table(其中包含我的较大数据集的第一个数据点)。这些数据一直持续到今天。
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
;
可能有很多方法可以做到这一点。我只是按 site_id 和年份分组并进行计数。
select * from (
select site_id,
extract(year from sysdate) - extract(year from date_time) as diff_year,
count(1) as num_years
from site_trends
group by site_id, extract(year from date_time)
) where diff_year > 38 and num_years = diff_year;