1. प्रत्येक उपयोगकर्ता के लिए 3 कोड हैं (10,20,30)
  2. यदि सभी कोड (10,20,30) सत्य हैं तो उसे JOINED करना होगा
  3. यदि कोई कोड (10,20,30) गलत है तो उसे अनदेखा करना होगा
  4. हमें अधिकतम (तिथि) की जांच करनी है

तालिका नीचे है:

+-------+------+-------+------------+
| user  | code | bool  |    date    |
+-------+------+-------+------------+
| user1 |  10  | True  | 31/10/2019 |
| user1 |  20  | True  | 31/10/2019 |
| user1 |  30  | False | 31/10/2019 |
| user2 |  10  | True  | 31/10/2019 |
| user2 |  20  | True  | 31/10/2019 |
| user2 |  30  | True  | 31/10/2019 |
| user3 |  10  | True  | 31/10/2019 |
| user3 |  20  | True  | 31/10/2019 |
| user3 |  30  | True  | 31/10/2019 |
+-------+------+-------+------------+

आउटपुट उपयोगकर्ता 2 और उपयोगकर्ता 3 शामिल हो गए हैं, उपयोगकर्ता 1 उपेक्षित है

+------------+--------+-----------+
|    DATE    | JOINED | NEGLECTED |
+------------+--------+-----------+
| 31/10/2019 |    2   |    1      |
+------------+--------+-----------+
1
Maws 31 पद 2019, 11:07

1 उत्तर

मैं एक प्रश्न के साथ शुरू करूंगा जो उपयोगकर्ताओं को समूहित करता है और कोड के आधार पर उनकी स्थिति की गणना करता है। फिर, मैं प्रत्येक दिन शामिल या उपेक्षित उपयोगकर्ताओं की संख्या की गणना करने के लिए इस क्वेरी को एक समग्र क्वेरी के साथ लपेटूंगा:

SELECT   `date`,
         SUM(`status` = 'joined') AS joined,
         SUM(`status` = 'neglected') AS neglected
FROM     (SELECT   `user`,
                   `date`,
                   CASE BIT_AND(bool) WHEN TRUE THEN 'joined' ELSE 'neglected' END AS status
          FROM     `mytable`
          GROUP BY `user`, `date`) t
GROUP BY `date`
0
Mureinik 31 पद 2019, 09:54