T-SQL, एसक्यूएल सर्वर 2008 और ऊपर15 में समूह सारणी मिनिट के अंतराल
की
StatusSetDateTime एक नमूना तालिका को देखते हुए | उपयोगकर्ता आईडी | स्थिति | StatusEndDateTime | StatusDuration (सेकंड में) =========================================== ================================= 2012-01-01 12:00:00 | आईआईडी | उपलब्ध | 2012-01-01 13:00:00 | 3600
मुझे लगता है कि नीचे तोड़ने के लिए एक दृश्य उदाहरण के लिए 15 मिनट के अंतराल का उपयोग करता है में की जरूरत है:
IntervalStart | उपयोगकर्ता आईडी | स्थिति | अवधि
===========================================
2012-01-01 12:00:00 | आईआईडी | उपलब्ध | 900
2012-01-01 12:15:00 | आईआईडी | उपलब्ध | 900
2012-01-01 12:30:00 | आईआईडी | उपलब्ध | 900
2012-01-01 12:45:00 | आईआईडी | उपलब्ध | 900
2012-01-01 13:00:00 | आईआईडी | उपलब्ध | 0
आदि ....
अब मैं चारों ओर खोज और आप कुछ पूछना चाहते है कि नीचे टूट जाएगा मैं MySql Here के लिए कुछ इसी तरह पाया ढूँढने में सक्षम किया गया है: टी के लिए कुछ
और -एसक्यूएल Here
लेकिन दूसरे उदाहरण पर वे परिणाम एकत्र कर रहे हैं जबकि मुझे स्थिति द्वारा उपयोगकर्ता द्वारा अंतराल समय (900 सेकंड) द्वारा कुल अवधि को विभाजित करने की आवश्यकता है।
मैं सभी लिंक को अंतराल में विभाजित करने के लिए दूसरे लिंक में उदाहरणों को अनुकूलित करने में सक्षम था लेकिन कुल अवधि का समय वापस कर दिया गया है और मैं समझ नहीं पा रहा हूं कि अंतराल अवधि को विभाजित करने के लिए कैसे प्राप्त करें (और अभी भी कुल मूल तक अवधि)।
किसी भी जानकारी के लिए अग्रिम धन्यवाद!
संपादित करें: सबसे पहले प्रयास
;with cte as
(select MIN(StatusDateTime) as MinDate
, MAX(StatusDateTime) as MaxDate
, convert(varchar(14),StatusDateTime, 120) as StartDate
, DATEPART(minute, StatusDateTime) /15 as GroupID
, UserID
, StatusKey
, avg(StateDuration) as AvgAmount
from AgentActivityLog
group by convert(varchar(14),StatusDateTime, 120)
, DATEPART(minute, StatusDateTime) /15
, Userid,StatusKey)
select dateadd(minute, 15*GroupID, CONVERT(datetime,StartDate+'00'))
as [Start Date]
, UserID, StatusKey, AvgAmount as [Average Amount]
from cte
संपादित करें: दूसरा प्रयास
;With cte As
(Select DateAdd(minute
, 15 * (DateDiff(minute, '20000101', StatusDateTime)/15)
, '20000101') As StatusDateTime
, userid, statuskey, StateDuration
From AgentActivityLog)
Select StatusDateTime, userid,statuskey,Avg(StateDuration)
From cte
Group By StatusDateTime,userid,statuskey;
आपके उदाहरण में, आपने 5 पंक्तियों और 5 * 900 में विभाजित किया है! = 3600 या क्या मुझे कुछ याद आ रही है? –
क्या आपका पहला अंतराल हमेशा स्टेटससेटडेट टाइम के समय से शुरू होता है, या यह हमेशा 00 00: 15, 30, 45 पर आधारित है? अपने उदाहरण का प्रयोग करते हुए, यदि StatusSetDateTime 12:06:30 के रूप में आया, तो क्या आपका पहला अंतराल 12; 00: 00 या 12:06:30 पर शुरू होगा? साथ ही, क्या आप एसक्यूएल को विभाजित करने के लिए अब तक पोस्ट कर सकते हैं? –
@ फ़ारुकसाइन क्षमा करें, मुझे अंतिम अंतराल में 0 को पकड़ने के लिए धन्यवाद देना था। अंतराल हमेशा 00, 15, 30, 45 – Wjdavis5