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

Mysql में दो स्तंभों का अनूठा संयोजन या पोस्टग्रेज

सभी जोड़े प्राप्त करने का एक विकल्प, चाहे वे आगे या पीछे हों (उदाहरण के लिए (1, 2) ==(2, 1)) LEAST() का चयन करना है और GREATEST() प्रत्येक पंक्ति से, और फिर भिन्न मानों का चयन करें। इस क्वेरी का उपयोग करना:

SELECT DISTINCT LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id)
FROM myTable;

आपको निम्न आउटपुट मिलेगा:

| 1 | 2 |
| 1 | 3 |

एक बार आपके पास यह हो जाने के बाद, आप प्रत्येक जोड़ी के लिए अधिकतम तिथि प्राप्त करने के लिए इनके द्वारा समूह बना सकते हैं:

SELECT LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id), MAX(created_at)
FROM myTable
GROUP BY LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id);

यह क्वेरी आपको प्रत्येक जोड़ी के लिए आवश्यक डेटा देगी, लेकिन यह आपकी मूल तालिका से वास्तविक पंक्ति नहीं लौटाएगी। यदि प्रारूप की एक पंक्ति है | 2 | 1 | 2014-10-15 | यह क्वेरी वापस आ जाएगी | 1 | 2 | 2014-10-15

अपनी तालिका से मूल पंक्ति प्राप्त करने के लिए, आपको JOIN . की आवश्यकता होगी इस शर्त पर कि सभी आवश्यक कॉलम मेल खाते हों:

SELECT m.*
FROM myTable m
JOIN(
  SELECT LEAST(sender_id, recipient_id) AS least, 
    GREATEST(sender_id, recipient_id) AS greatest,
    MAX(created_at) AS maxDate
  FROM myTable
  GROUP BY LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id)) tmp
ON tmp.least = LEAST(m.sender_id, m.recipient_id) AND tmp.greatest = GREATEST(m.sender_id, m.recipient_id) AND tmp.maxDate = m.created_at;

यह रहा एक SQL Fiddle उदाहरण जो आपके अपेक्षित परिणामों से मेल खाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL कथन अब से अगले 2 दिन की तारीख पाने के लिए

  2. संकलन त्रुटि:पहुँच के लिए VBA में अपेक्षित कार्य या चर

  3. अल्पविराम से अलग मूल्यों के साथ ट्रिगर में लूप mysql

  4. खाली मान को '' या NULL के रूप में बेहतर उपयोग करना है?

  5. PHP और MySQL का उपयोग करके जापानी वर्ण प्रदर्शित करने में समस्या