Как правильно настроить функцию окна? (PostgreSQL) - PullRequest
0 голосов
/ 29 мая 2019

Я хочу получить первую запись (datum, crop_type), в которой выращивается конкретный урожай. список, из которого я хочу извлечь эту информацию, уже упорядочен по годам и месяцам, однако я понятия не имею, как правильно настроить функцию окна. Я думаю, что самый простой способ - вернуться к каждому соответствующему урожаю (где yield_fm! = 0) и типу урожая! = 999999, но, как я уже сказал, понятия не имею, как это сделать.

фрагмент с моего стола:

"datum","crop_type","yield_fm"
1996-01-01,3,0
1996-02-01,3,0
1996-03-01,3,0
1996-04-01,3,0
1996-05-01,3,0
1996-06-01,3,0
1996-07-01,3,0
1996-08-01,3,9.5
1996-09-01,999999,0
1996-10-01,999999,0
1996-11-01,999999,0
1996-12-01,999999,0
1997-01-01,999999,0
1997-02-01,999999,0
1997-03-01,999999,0
1997-04-01,16,0
1997-05-01,16,0
1997-06-01,16,0
1997-07-01,16,0
1997-08-01,16,0
1997-09-01,16,53.7
1997-10-01,999999,0
1997-11-01,3,0
1997-12-01,3,0
1998-01-01,3,0
1998-02-01,3,0
1998-03-01,3,0
1998-04-01,3,0
1998-05-01,3,0
1998-06-01,3,0
1998-07-01,3,0
1998-08-01,3,8
1998-09-01,999999,0
1998-10-01,3,0
1998-11-01,3,0
1998-12-01,3,0
1999-01-01,3,0
1999-02-01,3,0
1999-03-01,3,0
1999-04-01,3,0
1999-05-01,3,0
1999-06-01,3,0
1999-07-01,3,0
1999-08-01,3,8

1 Ответ

1 голос
/ 29 мая 2019

Таблицы SQL представляют неупорядоченные наборы. Нет порядка, если столбцы не указывают порядок.

Если вы хотите первую строку для каждого типа культуры, то в Postgres я бы порекомендовал distinct on:

select distinct on (crop_type) t.*
from t
order by crop_type, datum;

distinct on - расширение Postgres. Он возвращает по одной строке для каждой комбинации в предложении distinct on - в данном случае по одной на crop_type.

Возвращенная строка является первой из найденных, base don в предложении order by. Первые столбцы в order by должны соответствовать столбцам в distinct on. Затем оставшиеся столбцы определяют «первый».

...