Manchmal müssen Sie möglicherweise den neuesten Datensatz auswählen oder den neuesten Datensatz für jedes Datum, jeden Benutzer, jede ID oder jede andere Gruppe abrufen. Hier ist die SQL-Abfrage, um den letzten Datensatz in jeder Gruppe in MySQL zu erhalten, da es dafür keine eingebaute Funktion gibt. Sie können es auch verwenden, um die letzte Zeile für jede Gruppe in PostgreSQL, SQL Server und Oracle auszuwählen.
So erhalten Sie den letzten Datensatz in jeder Gruppe in MySQL
Hier sind die Schritte, um den letzten 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 letzten Datensatz in jeder Gruppe erhalten, d. h. für jedes Produkt. Zuerst verwenden wir GROUP BY, um das neueste Datum für jede Gruppe zu erhalten.
mysql> select product,max(order_date) from product_sales group by product; +---------+-----------------+ | product | max(order_date) | +---------+-----------------+ | A | 2020-05-03 | | B | 2020-05-03 | | C | 2020-05-03 | +---------+-----------------+
Jetzt, da wir das neueste Datum für jede Gruppe kennen, verbinden wir dieses Ergebnis mit unserer ursprünglichen Tabelle, um den neuesten Datensatz nach Datumsgruppe zu erhalten.
mysql> select product_sales.* from product_sales, (select product,max(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 | 150 | | B | 2020-05-03 | 250 | | C | 2020-05-03 | 1850 | +---------+------------+------+
Bonuslektüre:So erstellen Sie eine Ansicht in MySQL
So wählen Sie den neuesten Datensatz für jeden Benutzer aus
Ebenso können Sie den neuesten Datensatz für jeden Benutzer auswählen oder den neuesten 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 | +---------+------------------+------+
Bonus-Lesetext:So gewinnen Sie neue Benutzer pro Tag in MySQL
Zuerst erhalten wir das späteste Datum für jede Benutzer-ID mit GROUP BY.
mysql> select user_id,max(transaction_date) from user_data group by user_id; +---------+-----------------------+ | user_id | max(transaction_date) | +---------+-----------------------+ | 1 | 2020-05-03 | | 2 | 2020-05-03 | | 3 | 2020-05-03 | +---------+-----------------------+
Da wir nun das neueste Datum für jede Benutzer-ID kennen, verbinden wir dieses Ergebnis mit unserer ursprünglichen Tabelle, um den neuesten Datensatz nach Benutzergruppe zu erhalten.
mysql> select user_data.* from user_data, (select user_id,max(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-03 | 15 | | 2 | 2020-05-03 | 25 | | 3 | 2020-05-03 | 50 | +---------+------------------+------+
Hoffentlich können Sie den letzten Datensatz in jeder Gruppe in MySQL erhalten