मुझे लगता है कि आप निम्न की तरह तर्क चाहते हैं, जहां आप जांचते हैं कि प्रत्येक उद्घाटन रिकॉर्ड के लिए कोई समापन रिकॉर्ड मौजूद है या नहीं। हालांकि प्रदान किए गए डेटा का उपयोग करके अपने अपेक्षित परिणाम प्राप्त करना संभव नहीं लगता।
DECLARE @emp_swipe_rec table (EMPLOYEE_ID int, TASK_ID int, SWIPE_TYPE char(1), SWIPE_IN_OUT_TIME datetime2);
DECLARE @Now datetime2 = '2021-03-07 16:40:00.000'; --sysdatetime();
INSERT INTO @emp_swipe_rec (EMPLOYEE_ID, TASK_ID, SWIPE_TYPE, SWIPE_IN_OUT_TIME)
VALUES
(1,1,'I','2021-03-07 08:00:00.000'),
(2,2,'I','2021-03-07 08:00:00.000'),
(1,1,'O','2021-03-07 15:00:00.000'),
(1,3,'I','2021-03-07 16:00:00.000');
SELECT I.EMPLOYEE_ID, I.TASK_ID
, DATEDIFF(MINUTE, I.SWIPE_IN_OUT_TIME, @Now) AS TimeSpent
FROM @emp_swipe_rec I
WHERE SWIPE_TYPE = 'I'
-- Rule out any where a closing record in the future exists
AND NOT EXISTS (
SELECT 1
FROM @emp_swipe_rec O
WHERE O.EMPLOYEE_ID = I.EMPLOYEE_ID
AND O.TASK_ID = I.TASK_ID
AND SWIPE_TYPE = 'O'
AND O.SWIPE_IN_OUT_TIME > I.SWIPE_IN_OUT_TIME
);
टाइमस्टैम्प का उपयोग करके निम्नलिखित लौटाता है जो 40 मिनट देता है - लेकिन यह सुनिश्चित नहीं है कि आप 130 मिनट के साथ कैसे आए:
EMPLOYEE_ID | TASK_ID | समय व्यतीत |
---|---|---|
2 | 2 | 520 |
1 | 3 | 40 |
कृपया भविष्य के संदर्भ के लिए ध्यान दें, यदि आप इस तरह से आपको नमूना डेटा प्रदान करते हैं (डीडीएल + डीएमएल) तो आप न केवल अपने प्रश्न को स्पष्ट करते हैं, आप लोगों के उत्तर देने में भी आसान बनाते हैं