कभी-कभी आपको सबसे हाल के रिकॉर्ड का चयन करने या प्रत्येक तिथि, उपयोगकर्ता, आईडी या किसी अन्य समूह के लिए नवीनतम रिकॉर्ड प्राप्त करने की आवश्यकता हो सकती है। MySQL में प्रत्येक समूह में अंतिम रिकॉर्ड प्राप्त करने के लिए यहां SQL क्वेरी है, क्योंकि इसके लिए कोई अंतर्निहित फ़ंक्शन नहीं है। आप इसका उपयोग PostgreSQL, SQL Server और Oracle में प्रत्येक समूह के लिए अंतिम पंक्ति का चयन करने के लिए भी कर सकते हैं।
MySQL में प्रत्येक समूह में अंतिम रिकॉर्ड कैसे प्राप्त करें
MySQL में प्रत्येक समूह में अंतिम रिकॉर्ड प्राप्त करने के चरण यहां दिए गए हैं।
मान लें कि आपके पास एक टेबल है product_sales(product, order_date,sale) जिसमें कई उत्पादों का बिक्री डेटा शामिल है।
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 | +---------+------------+------+
बोनस पढ़ें :MySQL में अधिकतम मूल्य के साथ रिकॉर्ड कैसे प्राप्त करें
मान लीजिए कि आप प्रत्येक समूह में, यानी प्रत्येक उत्पाद के लिए अंतिम रिकॉर्ड प्राप्त करना चाहते हैं। सबसे पहले हम प्रत्येक समूह के लिए नवीनतम दिनांक प्राप्त करने के लिए GROUP BY का उपयोग करते हैं।
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 | +---------+-----------------+
अब जब हम प्रत्येक समूह के लिए सबसे हाल की तारीख जानते हैं, तो हम इस परिणाम को अपनी मूल तालिका के साथ जोड़ते हैं ताकि तारीख समूह द्वारा नवीनतम रिकॉर्ड प्राप्त किया जा सके।
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 | +---------+------------+------+
बोनस पढ़ें :MySQL में व्यू कैसे बनाएं
हर उपयोगकर्ता के लिए नवीनतम रिकॉर्ड का चयन कैसे करें
इसी तरह, आप प्रत्येक उपयोगकर्ता के लिए नवीनतम रिकॉर्ड का चयन कर सकते हैं या प्रत्येक आईडी के लिए नवीनतम रिकॉर्ड प्राप्त कर सकते हैं। मान लें कि आपके पास निम्न तालिका है user_data(user_id,transaction_date,sale) उपयोगकर्ता लेन-देन डेटा के साथ
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 | +---------+------------------+------+
बोनस पढ़ें :MySQL में प्रतिदिन नए उपयोगकर्ता कैसे प्राप्त करें
सबसे पहले, हम 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 | +---------+-----------------------+
अब जब हम प्रत्येक उपयोगकर्ता आईडी के लिए सबसे हाल की तारीख जानते हैं, तो हम उपयोगकर्ता समूह द्वारा नवीनतम रिकॉर्ड प्राप्त करने के लिए इस परिणाम को अपनी मूल तालिका के साथ जोड़ते हैं।
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 | +---------+------------------+------+
उम्मीद है, आप MySQL में प्रत्येक समूह में अंतिम रिकॉर्ड प्राप्त कर सकते हैं