Дано: таблица n_birds (данные учетов
птиц ).
Необходимо: выбрать для каждого вида, и одновременно для каждого
года, максимальное значение показателя все_пары
только за время гнездования. Отобрать затем те виды, для которых
длина образовавшегося ряда значений составляет минимум 25 лет.
1. Вначале выберем данные за гнездовой период (май-июль) в новую табл.
g_pr:
select * into g_pr from n_birds
where date_part('month',дата::datetime)>4 and date_part('month',дата::datetime)<8;
2. Сгруппируем данные по годам и по видам, найдем максимум внутри каждой
группы, рез-т сохраним как табл. g_pr_max:
select вид,date_part('year',дата::datetime),max(все_пары::float4)
into g_pr_max from g_pr group by date_part('year',дата::datetime),вид order
by вид;
3. Добавим новый столбец cnt в табл. g_pr_max:
alter table g_pr_max add column
cnt int2;
4. Подсчитаем число макс. значений для каждого вида, рез-т сохраним
в табл. num_years_per_species:
select вид,count(date_part)
into num_years_per_species from g_pr_max group by вид order by вид;
5. Перенесем значение "счетчика" лет из таблицы num_years_per_species
в подготовленный столбец cnt табл. g_pr_max:
update g_pr_max set cnt = num_years_per_species.count::int2
where вид=num_years_per_species.вид;
6. Совсем просто - выберем из g_pr_max
в g_pr_max25:
select * into g_pr_max25 from g_pr_max
where cnt>24;
7. Просмотрим таблицу, например, для вида Dendrocopos leucotos:
select вид,max from g_pr_max25
where вид ~~ '%Dendrocopos leucotos%';
8. Теперь сохраним в табл. Dendrocopos_leucotos
только числа:
select max into Dendrocopos_leucotos
from g_pr_max25 where вид ~~ '%Dendrocopos leucotos%';
9. Из табл. Postgres скопируем ряд в текстовый файл:
copy Dendrocopos_leucotos to '/home/postgres/birds/max/dendrocopos_leucotos_TS';
10. Уберем ненужную таблицу:
drop table Dendrocopos_leucotos;
Затем, пп. 7-10 повторим для каждого вида.