Понякога може да се наложи да получите първи ред на група в PostgreSQL. Това може да бъде трудна заявка с обикновен SQL. За щастие PostgreSQL предлага функции на прозореца за такъв анализ на данни. Ето как да получите първи ред на група в PostgreSQL.
Как да получите първи ред на група в PostgreSQL
Ето стъпките за получаване на първи ред на група в PostgreSQL.
Да приемем, че имате следната таблица product_sales който съдържа продажби по отношение на продукта.
postgres=# create table product_sales( product varchar(255), order_date date, sale int); postgres=# insert into product_sales(product,order_date, sale) values('A','2020-05-01',250), ('B','2020-05-01',350), ('C','2020-05-01',1250), ('A','2020-05-02',450), ('B','2020-05-02',650), ('C','2020-05-02',1050), ('A','2020-05-03',150), ('B','2020-05-03',250), ('C','2020-05-03',1850); postgres=# select * from product_sales; product | order_date | sale ---------+------------+------ A | 2020-05-01 | 250 B | 2020-05-01 | 350 C | 2020-05-01 | 1250 A | 2020-05-02 | 450 B | 2020-05-02 | 650 C | 2020-05-02 | 1050 A | 2020-05-03 | 150 B | 2020-05-03 | 250 C | 2020-05-03 | 1850
Да приемем, че искате да получите първи ред във всяка група, тоест за всеки продукт. Можете лесно да получите първия запис за всяка група, като използвате ФУНКЦИЯТА НА ПРОЗОРЪТ.
Бонус за четене:Как да получите номер на ред в PostgreSQL
Как да получите първи ред на група в PostgreSQL
Ето SQL заявката за получаване на първи запис за група. Първо задаваме номер на ред за всеки запис от група.
postgres=# select *, row_number() over (partition by product order by order_date asc) as row_number from product_sales; product | order_date | sale | row_number ---------+------------+------+------------ A | 2020-05-01 | 250 | 1 A | 2020-05-02 | 450 | 2 A | 2020-05-03 | 150 | 3 B | 2020-05-01 | 350 | 1 B | 2020-05-02 | 650 | 2 B | 2020-05-03 | 250 | 3 C | 2020-05-01 | 1250 | 1 C | 2020-05-02 | 1050 | 2 C | 2020-05-03 | 1850 | 3
В горната заявка използваме номер_ред() функция за присвояване на номер на ред за всеки запис. Тъй като се нуждаем от отделно номериране на редовете за всяка група, ние използваме ФУНКЦИЯ ЗА ПРОЗОРЕЦ НА PARTITION. Казваме на Postgresql да раздели редовете по всеки продукт , тоест и сортирайте редовете за всяка група по order_date
След това просто трябва да използваме горния резултат, за да изберем редове, където row_number=1
postgres=# select * from ( select *, row_number() over (partition by product order by order_date asc) as row_number from product_sales ) temp where row_number=1; product | order_date | sale | row_number ---------+------------+------+------------ A | 2020-05-01 | 250 | 1 B | 2020-05-01 | 350 | 1 C | 2020-05-01 | 1250 | 1
Горната заявка ще ви даде първия запис във всяка група.
Бонус за четене:Как да изчислим процентил в PostgreSQL
Как да получите последния ред на група в PostgreSQL
Ако искате да получите последния ред на група в PostgreSQL, просто променете реда на сортиране в клаузата PARTITION на горната заявка от възходящ на низходящ.
postgres=# select * from ( select *, row_number() over (partition by product order by order_date desc) as row_number from product_sales ) temp where row_number=1; product | order_date | sale | row_number ---------+------------+------+------------ A | 2020-05-03 | 150 | 1 B | 2020-05-03 | 250 | 1 C | 2020-05-03 | 1850 | 1
Надяваме се, че можете да получите първия запис във всяка група в PostgreSQL.
Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!