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!