Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie den ersten Datensatz in jeder Gruppe in MySQL

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!