मेरे पास एक डेटा स्रोत है जिसमें उपयोगकर्ता लॉग इन और व्यक्तिगत रिकॉर्ड के रूप में लॉग आउट होते हैं। मुझे सत्र में प्रत्येक लॉग के आधार पर कुल लॉग इन समय प्राप्त करने का एक तरीका खोजने की आवश्यकता है, इसलिए मुझे लॉग इन को गठबंधन करने और उनके बीच समय अंतराल खोजने के लिए प्रत्येक रिकॉर्ड में लॉग आउट करने की आवश्यकता है और फिर अंतराल को खोजने के लिए योग करें कुल लॉग इन समय।

डेटा स्रोत में सत्र आईडी नहीं है इसलिए मैं इस तरह से रिकॉर्ड में शामिल नहीं हो सकता।

My data looks like this.

I want it to look like this.

क्या किसी को ऐसा करने का एक आसान तरीका पता है?

sql
0
Rob Ong 4 पद 2020, 15:56

1 उत्तर

सबसे बढ़िया उत्तर

यह मानते हुए कि लॉगिन/लॉगआउट रिकॉर्ड पूरी तरह से संरेखित हैं, तो lead() काफी सुविधाजनक है:

select user, login_time, logout_time
from (select user, state, time as login_time,
             lead(time) over (partition by user order by time) as logout_time
      from t
      where state in ('login', 'logout')
     ) t
where state = 'login';

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

0
Gordon Linoff 4 पद 2020, 14:56