A volte potrebbe essere necessario ottenere la prima riga in ogni gruppo o la riga minima per gruppo. Ecco come ottenere il primo record in ogni gruppo in MySQL. Puoi anche utilizzare questa query SQL per ottenere la prima riga in ogni gruppo in MySQL, PostgreSQL, SQL Server e Oracle. Puoi usarlo per selezionare la prima riga per ogni gruppo.
Come ottenere il primo record in ogni gruppo in MySQL
Ecco i passaggi per ottenere il primo record in ogni gruppo in MySQL.
Supponiamo che tu abbia una tabella product_sales(product, order_date,sale) che contiene dati di vendita per più prodotti.
mysql> create table product_sales(product varchar(255),order_date date, sale int); mysql> 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); mysql> 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 | +---------+------------+------+
Bonus Lettura:come ottenere record con il valore massimo in MySQL
Diciamo che vuoi ottenere il primo record in ogni gruppo, cioè per ogni prodotto. Per prima cosa utilizziamo GROUP BY per ottenere la prima data per ogni gruppo.
mysql> select product,min(order_date) from product_sales group by product; +---------+-----------------+ | product | max(order_date) | +---------+-----------------+ | A | 2020-05-01 | | B | 2020-05-01 | | C | 2020-05-01 | +---------+-----------------+
Ora che conosciamo la prima data per ogni gruppo, uniamo questo risultato alla nostra tabella originale per ottenere il primo record per gruppo di date.
mysql> select product_sales.* from product_sales, (select product,min(order_date) as order_date from product_sales group by product) max_sales where product_sales.product=max_sales.product and product_sales.order_date=max_sales.order_date; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-05-03 | 250 | | B | 2020-05-03 | 350 | | C | 2020-05-03 | 1250 | +---------+------------+------+
Se vuoi ottenere l'ultimo record o il più recente per ogni gruppo, usa la funzione MAX invece di MIN sopra.
Bonus Leggi:Come ottenere l'ultimo record in ogni gruppo
Come selezionare il record più recente per ciascun utente
Allo stesso modo, puoi selezionare il primo record per ogni utente o ottenere il record più vecchio per ogni ID. Supponiamo che tu abbia la seguente tabella user_data(user_id,transaction_date,sale) con i dati di transazione dell'utente
mysql> create table user_data(user_id int, transaction_date date, sale int); mysql> insert into user_data(user_id,transaction_date, sale) values('1','2020-05-01',25), ('2','2020-05-01',35), ('3','2020-05-01',125), ('1','2020-05-02',40), ('2','2020-05-02',50), ('3','2020-05-02',50), ('1','2020-05-03',15), ('2','2020-05-03',25), ('3','2020-05-03',50); mysql> select * from user_data; +---------+------------------+------+ | user_id | transaction_date | sale | +---------+------------------+------+ | 1 | 2020-05-01 | 25 | | 2 | 2020-05-01 | 35 | | 3 | 2020-05-01 | 125 | | 1 | 2020-05-02 | 40 | | 2 | 2020-05-02 | 50 | | 3 | 2020-05-02 | 50 | | 1 | 2020-05-03 | 15 | | 2 | 2020-05-03 | 25 | | 3 | 2020-05-03 | 50 | +---------+------------------+------+
Bonus Leggi:Come ottenere il record degli ultimi 15 giorni in MySQL
Innanzitutto, otteniamo la prima data per ogni ID utente utilizzando GROUP BY.
mysql> select user_id,min(transaction_date) from user_data group by user_id; +---------+-----------------------+ | user_id | min(transaction_date) | +---------+-----------------------+ | 1 | 2020-05-01 | | 2 | 2020-05-01 | | 3 | 2020-05-01 | +---------+-----------------------+
Ora che conosciamo la data più vecchia per ogni ID utente, uniamo questo risultato alla nostra tabella originale per ottenere il primo record per gruppo di utenti.
mysql> select user_data.* from user_data, (select user_id,min(transaction_date) as transaction_date from user_data group by user_id) max_user where user_data.user_id=max_user.user_id and user_data.transaction_date=max_user.transaction_date; +---------+------------------+------+ | user_id | transaction_date | sale | +---------+------------------+------+ | 1 | 2020-05-01 | 25 | | 2 | 2020-05-01 | 35 | | 3 | 2020-05-01 | 125 | +---------+------------------+------+
Si spera che tu possa ottenere il primo record in ogni gruppo in MySQL.
Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!