Às vezes, você pode precisar obter a primeira linha em cada grupo ou a linha mínima por grupo. Veja como obter o primeiro registro em cada grupo no MySQL. Você também pode usar essa consulta SQL para obter a primeira linha de cada grupo no MySQL, PostgreSQL, SQL Server e Oracle. Você pode usá-lo para selecionar a primeira linha de cada grupo.
Como obter o primeiro registro em cada grupo no MySQL
Aqui estão as etapas para obter o primeiro registro em cada grupo no MySQL.
Digamos que você tenha uma tabela product_sales(product, order_date,sale) que contém dados de vendas para vários produtos.
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 |
+---------+------------+------+
Bônus de leitura:Como obter registro com valor máximo no MySQL
Digamos que você queira obter o primeiro registro em cada grupo, ou seja, para cada produto. Primeiro, usamos GROUP BY para obter a primeira data de cada grupo.
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 | +---------+-----------------+
Agora que sabemos a primeira data de cada grupo, juntamos este resultado com nossa tabela original para obter o primeiro registro por grupo de datas.
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 você quiser obter o último ou mais recente registro para cada grupo, use MAX em vez da função MIN acima.
Bônus de leitura:Como obter o último registro em cada grupo
Como selecionar o registro mais recente para cada usuário
Da mesma forma, você pode selecionar o primeiro registro para cada usuário ou obter o registro mais antigo para cada id. Digamos que você tenha a seguinte tabela user_data(user_id,transaction_date,sale) com dados de transação do usuário
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 |
+---------+------------------+------+
Bônus de leitura:Como obter o registro dos últimos 15 dias no MySQL
Primeiro, obtemos a primeira data para cada ID de usuário usando 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 | +---------+-----------------------+
Agora que sabemos a data mais antiga de cada ID de usuário, juntamos esse resultado com nossa tabela original para obter o primeiro registro por grupo de usuários.
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 |
+---------+------------------+------+
Felizmente, você pode obter o primeiro registro em cada grupo no MySQL.
A Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!