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

MySQL विशिष्ट नियमों पर पंक्ति के बाद चयन करें

इसे जांचें:

WITH cte AS (
SELECT DATE(t1.`timestamp` - INTERVAL 5 HOUR) `date`,
       MAX(t1.`timestamp`) login, 
       MAX(t2.`timestamp`) online, 
       MAX(t3.`timestamp`) logout
FROM logging t1
JOIN logging t2 ON t1.`timestamp` < t2.`timestamp`
JOIN logging t3 ON t2.`timestamp` < t3.`timestamp`
WHERE t1.status = 'login'
  AND t2.status = 'online'
  AND t3.status = 'logout'
  AND NOT EXISTS ( SELECT NULL
                   FROM logging t4
                   WHERE t1.`timestamp` < t4.`timestamp`
                     AND t4.`timestamp` < t2.`timestamp`
                     AND t4.status IN ('login', 'online', 'logout') )
  AND NOT EXISTS ( SELECT NULL
                   FROM logging t5
                   WHERE t2.`timestamp` < t5.`timestamp`
                     AND t5.`timestamp` < t3.`timestamp`
                     AND t5.status IN ('login', 'logout') )
GROUP BY `date`
)
SELECT `date`,
       online,
       CASE WHEN DATE(online - INTERVAL 5 HOUR) = DATE(logout - INTERVAL '04:59:59' HOUR_SECOND)
            THEN logout
            ELSE DATE(online + INTERVAL 19 HOUR) + INTERVAL '04:59:59' HOUR_SECOND
            END logout
FROM cte

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. पर्ल और XPath:डेटाबेस तालिका में अनुपलब्ध प्रविष्टियाँ

  2. MySQL लेफ्ट जॉइन पर डुप्लिकेट कॉलम हटा रहा है, 3 टेबल

  3. एसक्यूएल इन क्लॉज - उन तत्वों में वापस आएं जो मेल नहीं खाते

  4. एक MySQL चेतावनी फँसाना

  5. वर्तमान कॉन्फ़िगरेशन के अनुसार कोई मैप किए गए Doctrine ORM निकाय नहीं हैं