Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Mendapatkan Catatan Terakhir Di Setiap Grup Di MySQL

Terkadang Anda mungkin perlu memilih catatan terbaru atau mendapatkan catatan terbaru untuk setiap tanggal, pengguna, id, atau grup lainnya. Inilah kueri SQL untuk mendapatkan catatan terakhir di setiap grup di MySQL, karena tidak ada fungsi bawaan untuk itu. Anda juga dapat menggunakannya untuk memilih baris terakhir untuk setiap grup di PostgreSQL, SQL Server &Oracle.

Cara Mendapatkan Catatan Terakhir Di Setiap Grup Di MySQL

Berikut adalah langkah-langkah untuk mendapatkan record terakhir di setiap grup di MySQL.

Katakanlah Anda memiliki tabel produk_penjualan(produk, tanggal_pesanan,obral) yang berisi data penjualan untuk beberapa produk.

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 Baca :Cara Mendapatkan Record dengan Max Value di MySQL

Katakanlah Anda ingin mendapatkan catatan terakhir di setiap grup, yaitu untuk setiap produk. Pertama kita menggunakan GROUP BY untuk mendapatkan tanggal terbaru untuk setiap grup.

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      |
+---------+-----------------+

Sekarang setelah kita mengetahui tanggal terbaru untuk setiap grup, kita gabungkan hasil ini dengan tabel asli kita untuk mendapatkan catatan terbaru menurut grup tanggal.

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 |
+---------+------------+------+

Bonus Baca :Cara Membuat View di MySQL

Cara Memilih Catatan Terbaru untuk Setiap Pengguna

Demikian pula, Anda dapat memilih catatan terbaru untuk setiap pengguna atau mendapatkan catatan terbaru untuk setiap id. Katakanlah Anda memiliki tabel berikut user_data(user_id,transaction_date,sale) dengan data transaksi pengguna

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 Baca :Cara Mendapatkan Pengguna Baru Per Hari di MySQL

Pertama, kami mendapatkan tanggal terbaru untuk setiap id pengguna menggunakan 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            |
+---------+-----------------------+

Sekarang setelah kita mengetahui tanggal terbaru untuk setiap id pengguna, kita menggabungkan hasil ini dengan tabel asli kita untuk mendapatkan catatan terbaru menurut grup pengguna.

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 |
+---------+------------------+------+

Mudah-mudahan, Anda bisa mendapatkan catatan terakhir di setiap grup di MySQL

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL di Cloud - Migrasi Online Dari Amazon RDS ke Instans EC2:Bagian Satu

  2. Saya tidak dapat menemukan my.cnf di komputer windows saya

  3. Memperbaiki batas waktu tunggu Lock terlampaui; coba mulai ulang transaksi untuk 'tabel Mysql macet?

  4. SQL Group By dengan Order By

  5. MySQL - Memilih data dari beberapa tabel semua dengan struktur yang sama tetapi data yang berbeda