Sunday, 15 February 2015

mysql - SQL SERVER (TSQL) SUM of inverse DateDiff (SQL or Stored Procedure) -


मेरे पास इस तालिका को बनाने के लिए एक मुश्किल SQL है:

  + ----------------------- + | कर्मचारी लॉगिन लॉगआउट | + ----------------------- + | 1 08:30 08:50 | | 1 09:00 10:00 | | 1 10:20 11:00 | + ----------------------- +  

सभी ब्रेक टाइम्स के योग के लिए मुझे एसक्यूएल की आवश्यकता है:

<पूर्व> 08:50 - & gt; 09:00 = 10 मिनट + 10:00 - & gt; 10:20 = 20 मिनट = कुल 30 मिनट में

इसलिए मुझे किसी भी तरह से हर रिकॉर्ड पर जाने और datediff विधि sum रिकॉर्ड्स के बीच के ब्रेक की अवधि।

क्या यह एसक्यूएल या संग्रहीत प्रक्रिया का उपयोग करने के लिए कोई आसान तरीका है

< @ दबजर्न द्वारा टिप्पणी के रूप में, आप पहले लॉग इन और अंतिम लॉगआउट (काम शिफ्ट) के बीच अंतर प्राप्त कर सकते हैं और घटा सकते हैं / div>

प्रत्येक लॉगिन-लॉग-आउट जोड़ी के अंतर के वास्तविक मूल्य के SUM (वास्तविक समय आप काम कर रहे हैं)। परिणामस्वरूप कुल समय हो सकता है जब आप काम नहीं कर रहे हों या आपका ब्रेक टाइम।

 ; नमूनाडेटा (कर्मचारी, लॉगिन, लॉगआउट) के रूप में (चयन 1, कास्ट ('08: 30 'एएस संयुक्त राष्ट्र संघ के सभी चयन 1, CAST ('0 9: 00 'एएस समय), CAST ('10: 00' एएस समय) यूनिअस ऑल सब्स 1, कास्ट ('10: 20 'समय के रूप में'), CAST ('11: 00 'एएस समय) कर्मचारी का चयन करें, कुलब्रिकेटटाईम = DATEDIFF (मिनट, मिन (लॉग इन), मैक्स (लॉगआउट)) - SUM (DATEDIFF (मिनट, लॉग इन, लॉगआउट)) नमूनाडेटा ग्रुप से कर्मचारी द्वारा  

का उपयोग करना लैग फ़ंक्शन

 ; नमूनाडेटा (कर्मचारी, लॉगिन, लॉगआउट) के रूप में AS (SELECT 1 , CAST ('08: 30 'एएस समय), CAST ('08: 50' एएस समय) यूनियन सभी का चयन 1, CAST ('0 9: 00 'एएस समय), कास्ट ('10: 00' एएस समय) संघ सब 1 का चयन करें, CAST ('10: 20 'के रूप में समय), CAST ('11: 00' एएस समय) यूनियन सभी का चयन 2, CAST ('10: 00 'एएस समय), CAST (' 10: 30 'एएस समय) संघ सभी का चयन 2, सीएएसटी ('10: 45' एएस समय), कास्ट ('11: 30 'के रूप में समय)), सीटेब्रैक टाइम के रूप में (SELECT *, BreakTime =  
से संपर्क करें, / html>

No comments:

Post a Comment