2011-07-05 13 views
9

मैंने इस पर एक सोलन खोजने का प्रयास किया है लेकिन अभी तक कोई भी खोजने में असमर्थ रहा है।एसक्यूएल सर्वर पिछले 4 सप्ताह से पिछले 4 सप्ताह का चयन करें और पिछले वर्ष से केवल इसी अवधि में केवल

मुझे आज की तारीख से डेटा के अंतिम 4 सप्ताह का चयन करने की आवश्यकता है जो मुद्दा नहीं है क्योंकि मैं सिर्फ date >= Dateadd(mm, -1, getdate()) करता हूं। हालांकि मैं पिछले वर्ष से उसी 4 सप्ताह के डेटा भी चाहता हूं। लेकिन मैं नहीं चाहता (उदाहरण के लिए) जून 1-30 2010 और जून 1-30 2011, मुझे

30 जून (गुरुवार) 2011 और 4 सप्ताह पहले और 1 जुलाई और चार सप्ताह पहले जुलाई 1 के रूप में पहले गुरुवार की आवश्यकता होगी पिछले हफ्ते से उसी सप्ताह में।

तो 8 सप्ताह का डेटा वापस कर दिया जाएगा।

सहायता के लिए धन्यवाद!

+0

क्या तर्क आप '6/30/2011' के बजाय' 7/7/2011' चयन करने के लिए प्रयोग कर रहे हैं? – JNK

+0

@ जेएनके यह '7/1/2010' है और यदि आप' 6/30/2011' से 52 सप्ताह घटाते हैं तो आपको '7/1/2010' मिलता है। – Fosco

उत्तर

15

आप कुछ और DATEADD() अच्छाई का उपयोग पिछले वर्ष के लिए वापस जाना कर सकते हैं: 2011/06/30 रिटर्न 2010/07/01 के रूप में आप का अनुरोध किया से

where theDate >= DATEADD(mm, -1, GETDATE())  
OR 
    (theDate <= DATEADD(week,-52,convert(datetime,GETDATE())) 
    and 
    theDate >= DATEADD(mm,-1,DATEADD(week,-52,convert(datetime,GETDATE())))) 

52 सप्ताह घटाने ... तब का उपयोग कर अपने निचले बाउंड के लिए वहां से 1 महीने का मूल घटाव।

तुम भी सप्ताह उपयोग करने के लिए पूरी बात स्विच कर सकता है ...

where theDate >= DATEADD(week, -4, GETDATE())  
OR 
    (theDate <= DATEADD(week,-52,convert(datetime,GETDATE())) 
    and 
    theDate >= DATEADD(week,-56,convert(datetime,GETDATE()))) 
+0

+1 - उसे स्थिरता के लिए महीने के बजाय सप्ताहों का उपयोग करना चाहिए। – JNK

+0

क्या होगा यदि मैं 4 सप्ताह के बजाय पिछले 12 सप्ताह प्राप्त करना चाहता हूं? – Si8

+0

फिर दूसरे उदाहरण का उपयोग करें, बदलें -4 से -12, -56 से -64। – Fosco

0

आप की स्थिति के बीच ored के एक सीरियल ऐसा कर सकते हैं:

select 
    ... 
from 
    ... 
where 
    1=1 
    or date between Dateadd(mm, -2, getdate()) and Dateadd(mm, -1, getdate()) 
    or date between Dateadd(mm, -11, getdate()) and Dateadd(mm, -10, getdate()) 
order by 
    date 

मैं सही समझ में आया?

+0

यह ओप का उल्लेख करने वाले सप्ताह के अंक को संभालने के लिए प्रतीत नहीं होता है, 6/30/2011 समाप्त होने वाले 4 सप्ताह का चयन, और 7/1/2010 को समाप्त होने वाले 4 सप्ताह का चयन करता है। – Fosco

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