sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat poslední řádek na skupinu v PostgreSQL

Někdy může být potřeba získat poslední řádek tabulky nebo získat poslední řádek na skupinu v PostgreSQL. Zde je návod, jak získat poslední záznam na skupinu v PostgreSQL.


Získat poslední řádek tabulky

Řekněme, že máte následující tabulku PostgreSQL.

postgres=#create table product_sales(product varchar(10),
          order_date date, sale int);

postgres=#insert into product_sales(product, order_date, sale)
values('A','2020-05-01 03:00:00',250),
('B','2020-05-01 05:30:00',350),
('C','2020-05-01 07:45:00',1250),
('A','2020-05-02 02:34:00',450),
('B','2020-05-02 01:24:00',650),
('C','2020-05-02 12:34:00',1050),
('A','2020-05-03 04:00:45',150),
('B','2020-05-03 05:45:00',250),
('C','2020-05-03 09:50:00',1850);

postgres=# select * from product_sales;
 product |      order_date     | sale
---------+---------------------+------
 A       | 2020-05-01 03:00:00 |  250
 B       | 2020-05-01 05:30:00 |  350
 C       | 2020-05-01 07:45:00 | 1250
 A       | 2020-05-02 02:34:00 |  450
 B       | 2020-05-02 01:24:00 |  650
 C       | 2020-05-02 12:34:00 | 1050
 A       | 2020-05-03 04:00:45 |  150
 B       | 2020-05-03 05:45:00 |  250
 C       | 2020-05-03 09:50:00 | 1850

Bonusové čtení:Funkce vytvoření PostgreSQL


Zde je dotaz na získání posledního řádku tabulky v závislosti na tom, jak jsou vaše řádky seřazeny. Ve výše uvedeném příkladu, protože jsou naše záznamy přidávány podle časového razítka, vybereme řádek s nejnovějším časovým razítkem.

postgres=# select * from product_sales 
           order by order_date desc
           limit 1;
 product |     order_date      | sale
---------+---------------------+------
 C       | 2020-05-03 09:50:00 | 1850

Ve výše uvedeném dotazu seřadíme řádky v sestupném pořadí podle časového razítka a vybereme první řádek pomocí klauzule LIMIT.

Bonusové čtení:Vytvořte schéma PostgreSQL



Získat poslední záznam na skupinu

Zde je dotaz SQL pro získání posledního řádku na skupinu, tedy každý produkt.

postgres=# select distinct on (product) product, order_date, sale
           from product_sales
           order by product, order_date desc;

 product |     order_date      | sale
---------+---------------------+------
 A       | 2020-05-03 04:00:45 |  150
 B       | 2020-05-03 05:45:00 |  250
 C       | 2020-05-03 09:50:00 | 1850

Ve výše uvedeném dotazu nejprve seřadíme řádky podle produktu (vzestupně) a datum_objednávky (klesající). Potom použijeme klauzuli DISTINCT ON k výběru pouze nejvyššího záznamu na skupinu, což není nic jiného než poslední záznam na skupinu.

Bonusové čtení:Jak vytvořit histogram v PostgreSQL

Doufejme, že nyní můžete snadno získat poslední řádek na skupinu 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!

  1. Relační vs nerelační databáze:Jaký je rozdíl?

  2. Mýty o výkonu:Proměnné tabulky jsou vždy v paměti

  3. Převeďte řetězec s oddělovači na řádky v oracle

  4. Jak funguje GREATEST() v MariaDB