tSQL önceki 3 ayınızı seçin

Ben bir sql insan değilim ve bir olma konusunda bir itimat olmuştur: \

Şu anki ay olmadan önceki 3 aylık verileri almaya çalışıyorum.

WHERE DATEPART(m, start_date) = DATEPART(m, DATEADD(m, -3, getdate())) 
 and DATEPART(yyyy, start_date) = DATEPART(yyyy, DATEADD(m, -3, getdate()))

Bu bana sadece Ocak ayındaki verileri veriyor, Jan-Mar'a ihtiyacım var.

WHERE start_date >= dateadd(mm,datediff(mm,0,getdate())-3,0)

ve bu beni 1 Ocak’tan itibaren her şeyi alıyor - şimdi.

Şimdi sıkışıp kaldım ve ne yapacağımı bilemiyorum. mssql ver: 2012

Herhangi bir yardım için şimdiden teşekkür ederiz.

0
Önceki 3 ay ile ne demek istiyorsun? Önceki 3 bütün takvim ayı? Bir önceki çeyrek? Mayıs ayında Şubat-Nisan ayları arasında bir veri beklenir mi?
katma yazar Necreaux, kaynak
Üzgünüm, evet, önceki tüm takvim ayları.
katma yazar yazzu, kaynak

6 cevap

WHERE DateColumn >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()) -3,0)
  AND DateColumn <  DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())   ,0)

This will return the data from Between 2015-01-01 and 2015-03-31

3
katma
Bir şey değil, yardım ettiğine sevindim.
katma yazar M.Ali, kaynak
hmmmmm sanmıyorum. bana düşecek bir datetime değeri ver ???
katma yazar M.Ali, kaynak
Cheers @Anon Düzeltdim, gösterdiğin için teşekkürler :)
katma yazar M.Ali, kaynak
Neden DateColumn değil? <= EOMONTH (...) ile BETWEEN tuzağına karşı savunmasız değil misiniz?
katma yazar Anon, kaynak
2015-03-31 12:00:00
katma yazar Anon, kaynak
Bu mükemmel çalıştı! Teşekkür ederim!
katma yazar yazzu, kaynak
Hala çalışıyor, teşekkür ederim M.Ali ve Anon!
katma yazar yazzu, kaynak

Bunu deneyebilirsiniz:

(1, 2, 3) 'de tarihin saati (mm, başlangıç_tarihi, getdate ())

1
katma
Adil olmak gerekirse, OP hiçbir zaman performanstan bahsetmedi
katma yazar Stephen Byrne, kaynak
Datetime sütunundaki herhangi bir dizini kullanmayacağından performansı etkileyecektir.
katma yazar M.Ali, kaynak
doğru, ama bu her zaman bir değerlendirme :)
katma yazar yazzu, kaynak

Bu yardımcı olur mu ?:

WHERE start_date BETWEEN DATEADD(m, -3, getdate()) AND DATEADD(m, -1, getdate()) 
0
katma
Op tarih kesinliğinden bahsetmedi. Yani eğer start_date ise '20150401 00:00' gibi olmalı.
katma yazar ericpap, kaynak
BETWEEN ile şeytanın ortak noktası ne var?
katma yazar M.Ali, kaynak
Operatör arasında çalışamayacağınız makaleyi okursanız tarihlerle çalışmazsa birkaç sırayı kaçıracaktır. Makaleyi okuyun, ne demek istediğimi anlarsınız.
katma yazar M.Ali, kaynak

Böyle bir şey kullanabilirsiniz:

WHERE MONTH(start_date)>= MONTH(getdate())- 3 AND MONTH(start_date)< MONTH(getdate())
0
katma
Datetime sütunundaki herhangi bir dizini kullanmayacağından performansı etkileyecektir.
katma yazar M.Ali, kaynak

Bir dize oluşturabilir ve tarihe dönüştürebilirsiniz ... örneğin:

WHERE start_date >= dateadd(month,-3, convert(datetime,convert(varchar(10),Month(GETDATE())) + '/01/' + convert(varchar(10),Year(GETDATE()))))
    and start_date < convert(datetime,convert(varchar(10),Month(GETDATE())) + '/01/' + convert(varchar(10),Year(GETDATE())))
0
katma
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,DATEADD(MONTH,-3,GETDATE())),0)  -- FIRST DAY OF MONTH, THREE MONTHS AGO
      ,DATEADD(MILLISECOND,-3,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) -- LAST DAY OF LAST MONTH
0
katma