En iyi yanıtlayıcılar
Sql Aylık,3 Aylık ve Yıllık veri çekme

Soru
-
Yanıtlar
-
Merhabalar,
Eğer doğru anladıysam girilen baslangic ve bitis tarihleri aralığında aylık, çeyreklik ve yıllık tutarları listelemek istiyorsunuz. Aşağıdaki yapıyı kendi tablonuza uyarlayarak deneyebilir misiniz?
Aylık için;
declare @baslangic datetime = '20120101' declare @bitis datetime = '20130520' select tarih, MAX(kur) from tbl where tarih in ( select EOMONTH(tarih) as ay from tbl where tarih >= @baslangic and tarih <= @bitis group by EOMONTH(tarih) ) group by tarih order by tarih
Çeyreklik için;
declare @baslangic datetime = '20120101' declare @bitis datetime = '20130520' select tarih, MAX(kur) from tbl where tarih in ( select CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, tarih) +1, 0))) as ceyrek from tbl where tarih >= @baslangic and tarih <= @bitis group by CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, tarih) +1, 0))) ) group by tarih order by tarih
Yıllık için;
declare @baslangic datetime = '20120101' declare @bitis datetime = '20130520' select tarih, MAX(kur) from tbl where tarih in ( select DATEADD(yy, DATEDIFF(yy,0,tarih) + 1, -1) as yil from tbl where tarih >= @baslangic and tarih <= @bitis group by DATEADD(yy, DATEDIFF(yy,0,tarih) + 1, -1) ) group by tarih order by tarih
Umarım faydalı olur...
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
www.abdullahaltintas.com- Yanıt Olarak İşaretleyen Umut Duran 30 Ekim 2016 Pazar 13:13
Tüm Yanıtlar
-
Ayları
,case when Month(Tarih)<4 then '01' when Month(Tarih)>3 and Month(Tarih)<7 then '02' when Month(Tarih)>6 and Month(Tarih)<10 then '03' when Month(Tarih)>9 then '04' end as donem
diyerek dönemlere ayırabilirsin. Tarihin de yılını alıp varchara cast edip bu dönemlerle toplayarak yıllara ve aylara göre guruplayabilirsin.
Select istenenalanlar from (select diger_alanlar, (Cast(Year(Tarih) as varchar)+ case when Month(Tarih)<4 then '01' when Month(Tarih)>3 and Month(Tarih)<7 then '02' when Month(Tarih)>6 and Month(Tarih)<10 then '03' when Month(Tarih)>9 then '04' end as donem) as yildonem from table) as t group by yildonem
gibi
http://pgnchess.com
http://dergikapaklari.com -
Aylik:
Select * from TabloAdi where Month(Tarih) = @istenenAy and Year(Tarih) = @istenenYil;
3 Aylik:
Select * from TabloAdi where DatePart(quarter, Tarih) = @istenenDonem and year(Tarih) = @istenenYil;
Yillik:
Select * from TabloAdi where Year(Tarih) = @istenenYil;
- Düzenleyen CetinBasoz 26 Ekim 2016 Çarşamba 20:37
-
Ayları
,case when Month(Tarih)<4 then '01' when Month(Tarih)>3 and Month(Tarih)<7 then '02' when Month(Tarih)>6 and Month(Tarih)<10 then '03' when Month(Tarih)>9 then '04' end as donem
diyerek dönemlere ayırabilirsin. Tarihin de yılını alıp varchara cast edip bu dönemlerle toplayarak yıllara ve aylara göre guruplayabilirsin.
Select istenenalanlar from (select diger_alanlar, (Cast(Year(Tarih) as varchar)+ case when Month(Tarih)<4 then '01' when Month(Tarih)>3 and Month(Tarih)<7 then '02' when Month(Tarih)>6 and Month(Tarih)<10 then '03' when Month(Tarih)>9 then '04' end as donem) as yildonem from table) as t group by yildonem
gibi
http://pgnchess.com
http://dergikapaklari.com
Yardım için teşekkür ederim fakat tam anlayamadım. Örneğin 01.01.2016 ve 31.12.2016 tarihleri arası çıktı nasıl olacaktır bu yazdığınız gibi olduğunda ? Kusura bakmayın uygulayıp deneyemedim çünkü çözemedim yazdığınızı. -
Aylik:
Select * from TabloAdi where Month(Tarih) = @istenenAy and Year(Tarih) = @istenenYil;
3 Aylik:
Select * from TabloAdi where DatePart(quarter, Tarih) = @istenenDonem and year(Tarih) = @istenenYil;
Yillik:
Select * from TabloAdi where Year(Tarih) = @istenenYil;
-
-
Yazmasina yazalim da. ne istedigin net olarak anlasilmiyor. Ornek versen iyi olur.
Örneğin iki tane textbox var. Birisi başlangıç tarihi diğeride bitiş tarihi olarak seçiliyor. Bir sene içinde ki bütün dolar kur değişimlerini gün gün veri tabanında kayıt ettim. 01.01.2011 başlangıç 01.01.2016 bitiş tarihi olsun. bir dropdownda ise aylık- 3 aylık ve yıllık listeleme şeklini seçiyoruz.Gelen verileri aylık olarak her ayın son gününü baz alacak şekilde çekecek. 3 aylıklarda da aynı mantık 3. ayın son gününü baz alacak sürekli. yıllıklarda da yılın son gününü baz alarak listeleyecek.
Mesela Aylık
31.01.2011 - 2.26 TL
31.02.2011 - 2.30 TL
3 Aylık
31.03.2011 - 2.50 TL
31.06.2011 - 2.55 TL
Senelik
31.12.2011 - 3.00 TL
31.12.2012 - 2.225 TL
gibi listeleme yapacak.
-
Merhabalar,
Eğer doğru anladıysam girilen baslangic ve bitis tarihleri aralığında aylık, çeyreklik ve yıllık tutarları listelemek istiyorsunuz. Aşağıdaki yapıyı kendi tablonuza uyarlayarak deneyebilir misiniz?
Aylık için;
declare @baslangic datetime = '20120101' declare @bitis datetime = '20130520' select tarih, MAX(kur) from tbl where tarih in ( select EOMONTH(tarih) as ay from tbl where tarih >= @baslangic and tarih <= @bitis group by EOMONTH(tarih) ) group by tarih order by tarih
Çeyreklik için;
declare @baslangic datetime = '20120101' declare @bitis datetime = '20130520' select tarih, MAX(kur) from tbl where tarih in ( select CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, tarih) +1, 0))) as ceyrek from tbl where tarih >= @baslangic and tarih <= @bitis group by CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, tarih) +1, 0))) ) group by tarih order by tarih
Yıllık için;
declare @baslangic datetime = '20120101' declare @bitis datetime = '20130520' select tarih, MAX(kur) from tbl where tarih in ( select DATEADD(yy, DATEDIFF(yy,0,tarih) + 1, -1) as yil from tbl where tarih >= @baslangic and tarih <= @bitis group by DATEADD(yy, DATEDIFF(yy,0,tarih) + 1, -1) ) group by tarih order by tarih
Umarım faydalı olur...
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
www.abdullahaltintas.com- Yanıt Olarak İşaretleyen Umut Duran 30 Ekim 2016 Pazar 13:13
-
Evet simdi cok guzel anlatmissin, net olarak elinde ne oldugu ve ne istedigin anlasiliyor. Ozetlersek:
- Gun gun kaydettim demissin. Yani tabloda her gun icin bir kayit var ve herhangi bir gunde sadece tek bir kayit var.
- Sadece ayin son gunune denk gelenler listelenecek.
- Secilen duruma gore aylik (1...12. aylar), donemlik (3,6,9,12. aylar) ya da (12.ay) olacak.
- (Soru SQL server forumunda soruldugu icin) Cozum T-SQL ile olacak.
- Belli bir baslangic bitis tarih araligi olacak.
Oncelikle hemen uyarayim, 2 tane textbox ile baslangic ve bitis tarihi alma, datetimepicker kullan. Sonucta parametre olarak baslangic, bitis ve aylik-donem-yillik gibi bir secim parametre olarak gelip sonuc istiyorsun. Tablonun adinin Kurlar oldugunu dusunursek (geriye dogru maksimum 10 yillik veri icin):
DECLARE @baslangic DATETIME = '20110101'; DECLARE @bitis DATETIME = '20160101'; DECLARE @secimTipi INT = 0; -- 0 Yillik, 1 3Aylik, 2 Aylik WITH tarihler ( tarih ) AS ( SELECT TOP ( 10 * 366 ) CAST(DATEADD(d, 1 - ( ROW_NUMBER() OVER ( ORDER BY t1.object_id ) ), GETDATE()) AS DATE) FROM master.sys.all_columns t1 CROSS JOIN master.sys.all_columns t2 ), sonGunler ( tarih ) AS ( SELECT tarih FROM tarihler WHERE tarih >= @baslangic AND tarih <= @bitis AND DATEADD(d, -DAY(DATEADD(m, 1, tarih)), DATEADD(m, 1, tarih)) = tarih AND ( ( @secimTipi = 0 AND DATEPART(MONTH, tarih) IN ( 12 ) ) OR ( @secimTipi = 1 AND DATEPART(MONTH, tarih) IN ( 3, 6, 9, 12 ) ) OR ( @secimTipi = 2 AND DATEPART(MONTH, tarih) IN ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ) ) ) ) SELECT * FROM Kurlar WHERE EXISTS ( SELECT * FROM sonGunler WHERE sonGunler.tarih = Kurlar.tarih );
Not : Bu isin, ornegin C# tarafinda, Linq ile yazimi cok daha basit ama bu kadar az veride nasil olsa milisaniyelik is.- Düzenleyen CetinBasoz 27 Ekim 2016 Perşembe 14:30
-