2012-09-18 8 views
8

है, तो मैं वर्तमान में इस समस्या से फंस गया हूं। मैं मान लीजिए निम्नलिखित दैनिक डेटासाप्ताहिक समूह कैसे करें यदि आपके पास दैनिक डेटा

+-------------------------+-----+----+ 
    |   Date   | C1 | C2 | 
    +-------------------------+-----+----+ 
    | 2012-08-01 00:00:00.000 | 44 | 44 | 
    | 2012-08-02 00:00:00.000 | 51 | 49 | 
    | 2012-08-03 00:00:00.000 | 60 | 59 | 
    | 2012-08-04 00:00:00.000 | 68 | 67 | 
    | 2012-08-05 00:00:00.000 | 82 | 78 | 
    | 2012-08-06 00:00:00.000 | 62 | 59 | 
    | 2012-08-07 00:00:00.000 | 58 | 53 | 
    | 2012-08-08 00:00:00.000 | 69 | 65 | 
    | 2012-08-09 00:00:00.000 | 82 | 72 | 
    | 2012-08-10 00:00:00.000 | 70 | 68 | 
    | 2012-08-11 00:00:00.000 | 75 | 71 | 
    | 2012-08-12 00:00:00.000 | 64 | 64 | 
    | 2012-08-13 00:00:00.000 | 74 | 69 | 
    | 2012-08-14 00:00:00.000 | 60 | 56 | 
    | 2012-08-15 00:00:00.000 | 66 | 60 | 
    | 2012-08-16 00:00:00.000 | 57 | 51 | 
    | 2012-08-17 00:00:00.000 | 52 | 49 | 
    +-------------------------+-----+----+ 

मैं इसे कैसे समूह इस तरह से है कि यह साप्ताहिक आधार द्वारा C1 और C2 योग जाएगा में होगी? अपेक्षित उत्पादन

+---------------------------+------+----+ 
|   Date    | C1 | C2 | 
+---------------------------+------+----+ 
| 2012-08-06 to 2012-12-12 | 480 | 452| 
| 2012-08-13 to 2012-08-19 | 430 | 394| 
+---------------------------+------+----+ 

यह 2012-08-06 के साथ शुरू के बाद से चक्र सोमवार से रविवार तक होना चाहिए होना चाहिए। मैंने एक घंटे या उससे भी ज्यादा समय तक चलने की कोशिश की है और ऐसा लगता है कि मेरी समस्या से कोई फर्क नहीं पड़ता, मुझे उम्मीद है कि कोई मेरी मदद कर सकता है।

धन्यवाद!

+0

जो एसक्यूएल के संस्करण (एक जवाब स्वीकार करने के लिए याद) सर्वर? –

उत्तर

6

इस प्रयास करें:

SET DATEFIRST 1 सोमवार को सप्ताह के अपने प्रारंभ कर देगा

SET DATEFIRST 1 

    SELECT CAST(MIN([DATE]) AS VARCHAR(20))+' TO '+CAST (MAX([DATE]) AS VARCHAR(20)) AS DATE, 
      SUM(C1) AS GRU, 
      SUM(C2) AS C1 
    FROM YOUR_TABLE 
    GROUP BY DATEPART(WEEK,[DATE]) 
    HAVING COUNT(DISTINCT[DATE])=7 

SET DATEFIRST 7 
+2

बिल्कुल वही जो मैं चाहता था। धन्यवाद! – Sherwin

3

इस तरह कुछ शायद

declare @t table(Date datetime, C1 int, C2 int) 
insert @t values('2012-08-01',44,44) 
insert @t values('2012-08-02',51,49) 
insert @t values('2012-08-03',60,59) 
insert @t values('2012-08-04',68,67) 
insert @t values('2012-08-05',82,78) 
insert @t values('2012-08-06',62,59) 
insert @t values('2012-08-07',58,53) 
insert @t values('2012-08-08',69,65) 
insert @t values('2012-08-09',82,72) 
insert @t values('2012-08-10',70,68) 
insert @t values('2012-08-11',75,71) 
insert @t values('2012-08-12',64,64) 
insert @t values('2012-08-13',74,69) 
insert @t values('2012-08-14',60,56) 
insert @t values('2012-08-15',66,60) 
insert @t values('2012-08-16',57,51) 
insert @t values('2012-08-17',52,49) 

select 
convert(varchar(10), dateadd(week, datediff(week, 0, date-1),0), 120)+' to '+ 
convert(varchar(10), max(dateadd(week, datediff(week, 0,date-1),6)), 120) Date, 
sum(C1) GRU, sum(C2) C1 
from @t 
group by dateadd(week, datediff(week, 0, date-1),0) 
having datediff(day, 0, min(date)) %7 = 0 
+0

हाय टी-क्लौसेन, मैंने कोशिश की है लेकिन ऐसा लगता है कि शुरुआती तारीख 2012-07-30 से 2012-08-05 है, और 7-30 सोमवार नहीं है। हालांकि आपके समय के लिए सराहना की और धन्यवाद! – Sherwin

+0

@ शेरविन 2012-07-30 सोमवार है, और मेरा समाधान बेहतर है। यह डेटाबेस सेटिंग्स –

+0

ओह हाँ क्षमा करें पर भरोसा नहीं करता है। हाँ मैं सहमत हूं, आपका समाधान बेहतर है हालांकि। धन्यवाद। – Sherwin

संबंधित मुद्दे