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

समय के लिए SQL क्वेरी इन/आउट उपस्थिति

इसे आजमाएं:

;with cte as
(select *, rank() over(partition by ID_Emp order by [Date]) rn
 from attendance)

select src.ID_Emp, src.Name, convert(date, src.[Date]) as [Date],
concat(datepart(hour,src.[Date]),':',datepart(minute,src.[Date])) as [TimeIn],
concat(datepart(hour,tgt.[Date]),':',datepart(minute,tgt.[Date])) as [TimeOut],
concat(datediff(minute,src.[Date],tgt.[Date])/60,':',datediff(minute,src.[Date],tgt. [Date])%60) as [Hours]
from cte src
inner join cte tgt on src.ID_Emp = tgt.ID_Emp and src.rn + 1 = tgt.rn and src.rn % 2 = 1

चेतावनी:मैंने इसे केवल SQL Server 2008 R2 पर परीक्षण किया है, लेकिन मुझे लगता है कि इसे Oracle पर भी उपयुक्त संशोधनों के साथ काम करना चाहिए।

व्याख्या:हम RANK . का उपयोग करते हैं प्रत्येक ID_Emp . के लिए दिनांक और समय के अनुसार क्रमित करने के लिए कार्य करता है . फिर, हम 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. एक एसक्यूएल सर्वर 2005 एक्सप्रेस डेटाबेस में डेटा के साथ यूटीसी में सभी डेटाटाइम कॉलम को कैसे परिवर्तित करें?

  2. केवल SQL सर्वर 2005 में दिनांक संग्रहीत करना

  3. SQL केस स्टेटमेंट:यह क्या है और इसका उपयोग करने के सर्वोत्तम तरीके क्या हैं?

  4. मैं SQL सर्वर में कैसे निर्धारित कर सकता हूं यदि कोई दिनांक समय सीमा दूसरे को ओवरलैप करती है?

  5. अशक्त वस्तु का मान #2 . होना चाहिए