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

एक कॉलम के अधिकतम मूल्य के आधार पर क्वेरी w / ORDER पर DISTINCT

यह आसान होगा। आपको max() की आवश्यकता नहीं है न ही DISTINCT इसके लिए:

SELECT *
FROM   profile_visits
WHERE  social_user_id = 21
AND    created_at > (now() - interval '2 months')
AND    visitor_id <> 21  -- ??
ORDER  BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT  6;

मुझे संदेह है कि आपका प्रश्न अधूरा है। यदि आप चाहते हैं:
6 नवीनतम विज़िटर अपने नवीनतम पेज विज़िट के साथ
तब आपको एक सबक्वेरी चाहिए। आप इस क्रम को एक क्वेरी स्तर में प्राप्त नहीं कर सकते, न ही DISTINCT ON . के साथ , न ही विंडो फ़ंक्शंस के साथ:

SELECT *
FROM  (
   SELECT DISTINCT ON (visitor_id) *
   FROM   profile_visits
   WHERE  social_user_id = 21
   AND    created_at > (now() - interval '2 months')
   AND    visitor_id <> 21  -- ??
   ORDER  BY visitor_id, created_at DESC NULLS LAST, id DESC NULLS LAST
   ) sub
ORDER  BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT  6;

सबक्वेरी sub प्रति उपयोगकर्ता नवीनतम विज़िट प्राप्त करता है (लेकिन दो महीने से अधिक पुराना नहीं है और एक निश्चित विज़िटर के लिए नहीं21 . ORDER BY DISTINCT ON . के समान प्रमुख कॉलम होने चाहिए ।

फिर 6 नवीनतम विज़िटर प्राप्त करने के लिए आपको बाहरी क्वेरी की आवश्यकता होगी।
घटनाओं के क्रम पर विचार करें:

क्यों NULLS LAST ? सुनिश्चित करने के लिए, आपने तालिका परिभाषा प्रदान नहीं की है।




  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. मुझे GUID को MySQL तालिकाओं में कैसे संग्रहीत करना चाहिए?

  3. त्रुटि कोड 1005, SQL स्थिति HY000:तालिका त्रुटि नहीं बना सकता:150

  4. क्लास में कोई टेबल या टैबलेटनाम निर्दिष्ट नहीं है और मौजूदा टेबल-मैप्ड क्लास से इनहेरिट नहीं करता है

  5. IN खंड में सभी मानों का मिलान करना