कर्मचारी द्वारा आदेशित डेटा प्राप्त करने के लिए आप उप-चयन या सीटीई का उपयोग कर सकते हैं और इसे मुख्य डेटा तालिका के रूप में उपयोग कर सकते हैं। कुछ इसी तरह (यदि आवश्यक हो तो इसे अनुकूलित करें):
;with ordered as (
select
emp_reader_id as empId,
CONVERT(DATE, dt) as Punch,
Row_number()
OVER (PARTITION BY emp_reader_id ORDER BY CONVERT(DATE, dt) ASC) as OrderedPunch
from trnevents
)
SELECT
entered.empId,
entered.Punch as PunchIn,
exited.Punch as PunchOut
from
ordered as entered
left join ordered as exited on
entered.empId = exited.empId
and entered.OrderedPunch + 1 = exited.OrderedPunch
स्पष्टीकरण:'आदेशित' सीटीई कर्मचारी के प्रवेश/निकास को दिनांक के अनुसार आदेशित करता है। ROW_NUMBER
प्रत्येक कर्मचारी के लिए रीसेट किया जाता है (मुझे लगता है कि emp_reader_id में कर्मचारी आईडी शामिल है) PARTITION BY
के कारण .
एक बार जब मुझे प्रत्येक कर्मचारी के लिए काउंटर मिल जाता है, तो मैं उस कर्मचारी के लिए अगले पंच के साथ प्रत्येक कर्मचारी के लिए प्रत्येक पंच (बाईं ओर पहली शर्त) में शामिल हो जाता हूं (बाएं शामिल होने में दूसरी स्थिति)। इस तरह मैं एंट्री कॉलम और एग्जिट (अगला पंच) दिखा सकता हूं।
अपने डेटा में इन और आउट कॉलम मिलने के बाद आप कुछ डेटा को बाहर करना चाह सकते हैं (प्रत्येक कर्मचारी की विषम पंक्तियाँ वे पंक्तियाँ हैं जिन्हें आप चाहते हैं) WHERE entered.OrderedPunch %2 = 1