Manchmal müssen Sie möglicherweise die erste Reihe in jeder Gruppe oder die kleinste Reihe pro Gruppe erhalten. So erhalten Sie den ersten Datensatz in jeder Gruppe in MySQL. Sie können diese SQL-Abfrage auch verwenden, um die erste Zeile in jeder Gruppe in MySQL, PostgreSQL, SQL Server und Oracle zu erhalten. Sie können es verwenden, um die erste Reihe für jede Gruppe auszuwählen.
So erhalten Sie den ersten Datensatz in jeder Gruppe in MySQL
Hier sind die Schritte, um den ersten Datensatz in jeder Gruppe in MySQL zu erhalten.
Angenommen, Sie haben eine Tabelle product_sales(product, order_date,sale) die Verkaufsdaten für mehrere Produkte enthält.
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 | +---------+------------+------+
Bonuslektüre:So erhalten Sie Datensätze mit maximalem Wert in MySQL
Angenommen, Sie möchten den ersten Datensatz in jeder Gruppe erhalten, dh für jedes Produkt. Zuerst verwenden wir GROUP BY, um das erste Datum für jede Gruppe zu erhalten.
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 | +---------+-----------------+
Da wir nun das erste Datum für jede Gruppe kennen, verbinden wir dieses Ergebnis mit unserer ursprünglichen Tabelle, um den ersten Datensatz nach Datumsgruppe zu erhalten.
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 | +---------+------------+------+
Wenn Sie den letzten oder neuesten Datensatz für jede Gruppe erhalten möchten, verwenden Sie die MAX- statt der MIN-Funktion oben.
Bonuslektüre:So erhalten Sie den letzten Datensatz in jeder Gruppe
So wählen Sie den neuesten Datensatz für jeden Benutzer aus
Ebenso können Sie den ersten Datensatz für jeden Benutzer auswählen oder den ältesten Datensatz für jede ID abrufen. Angenommen, Sie haben die folgende Tabelle user_data(user_id,transaction_date,sale) mit Benutzertransaktionsdaten
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 | +---------+------------------+------+
Bonuslektüre:So erhalten Sie die Aufzeichnung der letzten 15 Tage in MySQL
Zuerst erhalten wir das erste Datum für jede Benutzer-ID mit 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 | +---------+-----------------------+
Da wir nun das älteste Datum für jede Benutzer-ID kennen, verbinden wir dieses Ergebnis mit unserer ursprünglichen Tabelle, um den ersten Datensatz nach Benutzergruppe zu erhalten.
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 | +---------+------------------+------+
Hoffentlich können Sie den ersten Eintrag in jeder Gruppe in MySQL erhalten.
Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!