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