Terkadang Anda mungkin perlu mendapatkan baris pertama di setiap grup atau baris minimum per grup. Berikut cara mendapatkan record pertama di setiap grup di MySQL. Anda juga dapat menggunakan kueri SQL ini untuk mendapatkan 1 baris teratas di setiap grup di MySQL, PostgreSQL, SQL Server &Oracle. Anda dapat menggunakannya untuk memilih 1 baris teratas untuk setiap grup.
Cara Mendapatkan Catatan Pertama di Setiap Grup di MySQL
Berikut adalah langkah-langkah untuk mendapatkan record pertama 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 rekor pertama di setiap grup, yaitu untuk setiap produk. Pertama kita menggunakan GROUP BY untuk mendapatkan kencan pertama untuk setiap grup.
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 | +---------+-----------------+
Sekarang setelah kita mengetahui tanggal pertama untuk setiap grup, kita gabungkan hasil ini dengan tabel asli kita untuk mendapatkan catatan pertama berdasarkan grup tanggal.
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 | +---------+------------+------+
Jika Anda ingin mendapatkan catatan terakhir atau terbaru untuk setiap grup, gunakan fungsi MAX daripada MIN di atas.
Bonus Baca :Cara Mendapatkan Rekor Terakhir di Setiap Grup
Cara Memilih Catatan Terbaru untuk Setiap Pengguna
Demikian pula, Anda dapat memilih catatan pertama untuk setiap pengguna atau mendapatkan catatan terlama 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 Rekor 15 Hari Terakhir di MySQL
Pertama, kita mendapatkan tanggal pertama untuk setiap id pengguna menggunakan 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 | +---------+-----------------------+
Sekarang setelah kita mengetahui tanggal terlama untuk setiap id pengguna, kita menggabungkan hasil ini dengan tabel asli kita untuk mendapatkan catatan pertama berdasarkan grup pengguna.
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 | +---------+------------------+------+
Mudah-mudahan, Anda bisa mendapatkan catatan pertama di setiap grup di MySQL.
Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari ini!