Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्रति समूह MySQL शीर्ष 2 रिकॉर्ड

आपका विचार करीब है। मुझे लगता है कि यह बेहतर काम करेगा:

select u.*
from (select user_id, created_datetime, 
             $num := if(@user_id = user_id, @num + 1,
                        if(@user_id := id, 1, 1)
                       ) as row_number
      from logs cross join
           (select @user_id := 0, @num := 0) params
      order by user_id 
     ) u
where row_number <= 2 ;

ये हैं बदलाव:

  • चर केवल एक व्यंजक में सेट होते हैं। MySQL अभिव्यक्तियों के मूल्यांकन के क्रम की गारंटी नहीं देता है, इसलिए यह महत्वपूर्ण है।
  • कार्य एक सबक्वेरी में किया जाता है, जिसे बाद में बाहरी क्वेरी में संसाधित किया जाता है।
  • उपश्रेणी order by का उपयोग करती है , नहीं group by
  • बाहरी क्वेरी where का उपयोग करती है having . के बजाय (वास्तव में, MySQL में having काम करेगा, लेकिन where अधिक उपयुक्त है)।



  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 में नाम से ग्रुप से पहले दिनांक और समय के अनुसार ऑर्डर करें

  2. उच्चतम/सबसे छोटे <जो कुछ भी> प्रति समूह के साथ रिकॉर्ड प्राप्त करें

  3. आरक्षण प्रणाली के लिए अगली उपलब्ध तिथि खोजने के लिए SQL क्वेरी में सहायता करें

  4. सी # MySqlParameter समस्या

  5. mysqld सेवा ec2 सर्वर पर दिन में एक बार बंद हो जाती है