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

MySQL समूह 2 कॉलम के साथ जब मानों को कॉलम में इंटरचेंज किया जाता है

प्रत्येक पंक्ति के लिए "थ्रेड" निर्धारित करने का एक तरीका है CONCAT () LEAST GREATEST<के साथ दो नंबरों में से /कोड> एक ही दो संख्याओं का।

फिर हम GROUP BY . कर सकते हैं "थ्रेड" पर, नवीनतम generated_time प्राप्त करने के लिए . होने . में खंड, हम केवल उन "थ्रेड" को फ़िल्टर करते हैं, जिनमें कम से कम एक 'INCOMING' है 'समीक्षा' . के साथ संदेश टाइप करें।

डीबी फिडल पर देखें

SELECT m1.*
FROM   message AS m1
       JOIN (SELECT Concat(Least(m.from_number, m.to_number), '|',
                                                      Greatest(m.from_number,
                                                      m.to_number))
                                              AS
                    thread,
                    Max(m.generated_time)
                                              AS max_generated_time
             FROM   message AS m
             GROUP  BY thread
             HAVING Sum(m.direction = 'INCOMING'
                        AND m.type = 'REVIEW')) AS dt
         ON dt.thread = Concat(Least(m1.from_number, m1.to_number), '|',
                                         Greatest(m1.from_number, m1.to_number))
            AND dt.max_generated_time = m1.generated_time;

परिणाम

| id  | to_number    | from_number  | message         | direction | type   | generated_time      |
| --- | ------------ | ------------ | --------------- | --------- | ------ | ------------------- |
| 3   | +15005550004 | +16232950692 | How are you ?   | OUTGOING  |        | 2019-07-13 21:15:00 |
| 5   | +16232950692 | +15005550001 | Have a nice day | INCOMING  | REVIEW | 2019-07-12 12:17:00 |

सिडेनोट:

  1. उपरोक्त दृष्टिकोण (और आपका वर्तमान स्कीमा डिज़ाइन) इंडेक्स का उपयोग करने में सक्षम नहीं है, और इसलिए यह परफॉर्मेंट नहीं होगा ।
  2. मैं दो अतिरिक्त मास्टर टेबल बनाकर स्कीमा को फिर से डिज़ाइन करना चाहूंगा। एक मास्टर टेबल में फोन नंबर संग्रहित होंगे:phone_id , और संख्या
  3. एक और मास्टर टेबल "थ्रेड" को स्टोर करेगा, जिसमें phone_id होगा मान और thread_id . फिर आप इस thread_id का उपयोग कर सकते हैं आपके संदेश . में तालिका, फ़ोन नंबर संग्रहीत करने के बजाय।



  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 डेटाबेस का बैकअप लेने के लिए Windows बैच स्क्रिप्ट और बैकअप फ़ाइलों के साथ केवल N नवीनतम फ़ोल्डर रखें

  2. मैसकल:मैकोज़ पर इंस्टॉलेशन के ठीक बाद उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' के लिए एक्सेस अस्वीकृत

  3. वसंत को mysql से जोड़ने में असमर्थ

  4. MySQL ORDER BY RAND () फ़ंक्शन ऑर्डर कब करता है?

  5. उपयोगकर्ता क्रेडेंशियल्स को मान्य करने के लिए कौन सी विधि बेहतर है?