Někdy možná budete muset získat první řádek na skupinu v PostgreSQL. To může být obtížný dotaz pomocí prostého SQL. Naštěstí PostgreSQL nabízí funkce okna pro takovou analýzu dat. Zde je návod, jak získat první řádek na skupinu v PostgreSQL.
Jak získat první řádek na skupinu v PostgreSQL
Zde jsou kroky k získání prvního řádku na skupinu v PostgreSQL.
Řekněme, že máte následující tabulku prodej_produktů který obsahuje produktový prodej.
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
Řekněme, že chcete získat první řádek v každé skupině, tedy pro každý produkt. První záznam pro každou skupinu můžete snadno získat pomocí FUNKCE WINDOW.
Bonusové čtení:Jak získat číslo řádku v PostgreSQL
Jak získat první řádek na skupinu v PostgreSQL
Zde je dotaz SQL pro získání prvního záznamu na skupinu. Nejprve přiřadíme číslo řádku pro každý záznam na skupinu.
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
Ve výše uvedeném dotazu používáme row_number() funkce pro přiřazení čísla řádku pro každý záznam. Protože pro každou skupinu potřebujeme samostatné číslování řádků, použijeme FUNKCI ROZDĚLENÍ OKNA. Říkáme Postgresql, aby rozdělil řádky podle každého produktu , to znamená a seřadit řádky pro každou skupinu podle datum_objednávky
Dále musíme použít výše uvedený výsledek k výběru řádků, kde 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
Výše uvedený dotaz vám poskytne první záznam v každé skupině.
Bonusové čtení:Jak vypočítat percentil v PostgreSQL
Jak získat poslední řádek na skupinu v PostgreSQL
Pokud chcete získat poslední řádek na skupinu v PostgreSQL, jednoduše změňte pořadí řazení v klauzuli PARTITION výše uvedeného dotazu ze vzestupného na sestupné.
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
Doufejme, že můžete získat první záznam v každé skupině v PostgreSQL.
Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!