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

MySQL MIN/MAX उचित मान लौटा रहा है, लेकिन संबंधित रिकॉर्ड जानकारी नहीं

आप MySQL के ढीले नियमों के शिकार हो गए हैं जो गैर-समुच्चय को GROUP BY क्वेरी में शामिल करने की अनुमति देते हैं। ज़रूर, आप MIN या MAX के साथ काम कर रहे हैं, और केवल एक एक बार में, लेकिन इस प्रश्न पर विचार करें:

SELECT 
    CONCAT(work_type, work_id) AS condition_id, 
    status,
    MIN(created_timestamp) as earliest,
    MAX(created_timestamp) as latest
  FROM conditions
  GROUP BY condition_id

अब, सोचें कि कौन सी पंक्ति स्थिति कॉलम से आना चाहिए। एग्रीगेट (ग्रुप बाय में मौजूद) और नॉन-एग्रीगेट कॉलम के बीच संबंध रखना बेतुका है।

इसके बजाय, अपनी क्वेरी इस तरह लिखें

SELECT X.condition_id, C.status, X.earliest
FROM (
  SELECT 
    CONCAT(work_type, work_id) AS condition_id, 
    status,
    MIN(created_timestamp) as earliest
  FROM conditions
  GROUP BY condition_id
) X JOIN conditions C
  on CONCAT(c.work_type, c.work_id) = X.condition_id
  and c.created_timestamp = X.earliest

लेकिन अगर आपके पास एक ही create_timestamp के साथ दो रिकॉर्ड हैं, तो यह और भी मुश्किल हो जाता है

SELECT X.condition_id, Max(C.status) status, X.earliest
FROM (
  SELECT 
    CONCAT(work_type, work_id) AS condition_id, 
    status,
    MIN(created_timestamp) as earliest
  FROM conditions
  GROUP BY condition_id
) X JOIN conditions C
  on CONCAT(c.work_type, c.work_id) = X.condition_id
  and c.created_timestamp = X.earliest
GROUP BY X.condition_id, X.earliest


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel 5:पिवट के माध्यम से एक अतिरिक्त फ़ील्ड को सिंक करना

  2. क्या मैं इस utf8 कैरेक्टर को बदल सकता हूँ?

  3. अगर कथन, समूह के साथ आंतरिक शामिल हों

  4. समय की फिल्टर लंबाई

  5. पीडीओ से लौटाए गए ऑब्जेक्ट को अपनी कक्षा में सेट करना