Soms moet u de eerste rij in elke groep of de minimale rij per groep krijgen. Hier leest u hoe u het eerste record in elke groep in MySQL kunt krijgen. U kunt deze SQL-query ook gebruiken om de bovenste rij van elke groep in MySQL, PostgreSQL, SQL Server en Oracle te krijgen. Je kunt het gebruiken om de eerste rij voor elke groep te selecteren.
Hoe krijg ik het eerste record in elke groep in MySQL
Dit zijn de stappen om het eerste record in elke groep in MySQL te krijgen.
Stel dat u een tabel heeft product_sales(product, order_date,sale) die verkoopgegevens voor meerdere producten bevat.
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 lezen:hoe u een record met maximale waarde in MySQL kunt krijgen
Stel dat u het eerste record in elke groep wilt krijgen, dat wil zeggen voor elk product. Eerst gebruiken we GROUP BY om de eerste date voor elke groep te krijgen.
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 | +---------+-----------------+
Nu we de eerste datum voor elke groep weten, voegen we dit resultaat samen met onze originele tabel om de eerste record op datumgroep te krijgen.
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 | +---------+------------+------+
Als u de laatste of meest recente record voor elke groep wilt krijgen, gebruikt u de MAX-functie in plaats van de MIN-functie hierboven.
Bonus lezen:hoe u het laatste record in elke groep kunt krijgen
Hoe de meest recente record voor elke gebruiker te selecteren
Op dezelfde manier kunt u de eerste record voor elke gebruiker selecteren of de oudste record voor elke id krijgen. Stel dat u de volgende tabel user_data(user_id,transaction_date,sale) heeft met gebruikerstransactiegegevens
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 lezen:hoe u een record van de laatste 15 dagen in MySQL kunt krijgen
Eerst krijgen we de eerste datum voor elke gebruikers-ID met 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 | +---------+-----------------------+
Nu we de oudste datum voor elke gebruikers-ID weten, voegen we dit resultaat samen met onze oorspronkelijke tabel om de eerste record per gebruikersgroep te krijgen.
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 | +---------+------------------+------+
Hopelijk kun je het eerste record in elke groep in MySQL krijgen.
Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!