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

तालिका से केवल स्वाइप-इन उपयोगकर्ताओं का चयन कैसे करें जिसमें सभी स्वाइप रिकॉर्ड हैं

मुझे लगता है कि आप निम्न की तरह तर्क चाहते हैं, जहां आप जांचते हैं कि प्रत्येक उद्घाटन रिकॉर्ड के लिए कोई समापन रिकॉर्ड मौजूद है या नहीं। हालांकि प्रदान किए गए डेटा का उपयोग करके अपने अपेक्षित परिणाम प्राप्त करना संभव नहीं लगता।

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

कृपया भविष्य के संदर्भ के लिए ध्यान दें, यदि आप इस तरह से आपको नमूना डेटा प्रदान करते हैं (डीडीएल + डीएमएल) तो आप न केवल अपने प्रश्न को स्पष्ट करते हैं, आप लोगों के उत्तर देने में भी आसान बनाते हैं




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिकाएँ बदलें जिन्हें SQL Server 2008 R2 में दोहराया गया है

  2. SQL सर्वर में बहुत बड़ी टेबल

  3. वर्चुअलबॉक्स के साथ मैक पर SQL सर्वर कैसे स्थापित करें

  4. SQL सर्वर 2008 पूर्ण पाठ खोज - धीमा

  5. वीएस -2010/एसक्यूएल सर्वर2012 में एसएसआईएस के एसएसडीटी का उपयोग करने में असमर्थ