Haftasonu ve tatillerdeki kur değerlerini seçmek

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen cengaver »

Merhaba Arkadaşlar,

USD bazında günlük döviz alış kurlarını listelemem gerekiyor fakat veritabanında haftasonuna ve resmi tatil günlerine denk gelen zamanlarda kur bilgisi yok. Ben, resmi tatil ve hafta sonlarında da geçerli bir kur değeri bulmak zorundayım, bunu nasıl bir select cümlesiyle çözebilirim? Yani özetlersek, iki tarih arasındaki tüm günlerin karşısına bir USD kur listesi çekmek istersem bunu nasıl bir select cümlesiyle yapmalıyım?

İlgilendiğiniz için teşekkürler,

NOT: Verileri TCMB'den çekiyorum. Aşağıdaki SQL Scripti MySQL içindir.

Kod: Tümünü seç

CREATE TABLE `sm_kurlar` (
	`Ref` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`Tarih` DATETIME NOT NULL,
	`Kod` VARCHAR(3) NOT NULL,  /* USD, EUR, JPY gibi... */
	`Carpan` INT(10) UNSIGNED NULL DEFAULT '1',    /* "100 JAPON YENİ 1.9316 TL" gibi bir ibare nedeniyle bunu ekledim. Yani "1 ABD DOLARI 2.2927  TL* gibi genel bir ibare de var. Bu durumda 1 japon yenini bulmak için kur değerini 100'e bölmek gerekiyor... */
	`DovizAlis` DECIMAL(19,5) UNSIGNED NOT NULL,
	`DovizSatis` DECIMAL(19,5) UNSIGNED NOT NULL,
	`EfektifAlis` DECIMAL(19,5) UNSIGNED NOT NULL,
	`EfektifSatis` DECIMAL(19,5) UNSIGNED NOT NULL,
	`USDParite` DECIMAL(19,5) UNSIGNED NOT NULL,
	`EuroParite` DECIMAL(19,5) UNSIGNED NOT NULL,
	`DigerParite` DECIMAL(19,5) UNSIGNED NOT NULL,
	PRIMARY KEY (`Ref`),
	UNIQUE INDEX `Tarih_Kod` (`Tarih`, `Kod`),
	INDEX `Kod` (`Kod`),
	INDEX `Tarih` (`Tarih`)
)
COMMENT='Kur verileri yer alır.'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
Örnek olması açısından bu tablo ile ilgili bazı veriler de aşağıda script olarak yer alıyor;

Kod: Tümünü seç

INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-14 00:00:00', 'EUR', 1, 2.69790, 2.70280, 2.69600, 2.70690, 0.00000, 0.00000, 1.17670);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-14 00:00:00', 'IRR', 100, 0.00010, 0.00010, 0.00000, 0.00000, 273.48000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-14 00:00:00', 'JPY', 100, 0.01960, 0.01970, 0.01950, 0.01980, 1.16920, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-14 00:00:00', 'USD', 1, 2.29270, 2.29680, 2.29110, 2.30020, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-13 00:00:00', 'EUR', 1, 2.68990, 2.69480, 2.68800, 2.69880, 0.00000, 0.00000, 1.18100);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-13 00:00:00', 'IRR', 100, 0.00010, 0.00010, 0.00000, 0.00000, 273.14000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-13 00:00:00', 'JPY', 100, 0.01920, 0.01930, 0.01910, 0.01940, 1.18440, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-13 00:00:00', 'USD', 1, 2.27780, 2.28190, 2.27620, 2.28530, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-12 00:00:00', 'EUR', 1, 2.70370, 2.70860, 2.70180, 2.71270, 0.00000, 0.00000, 1.18110);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-12 00:00:00', 'IRR', 100, 0.00010, 0.00010, 0.00000, 0.00000, 272.92000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-12 00:00:00', 'JPY', 100, 0.01920, 0.01930, 0.01910, 0.01940, 1.18970, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-12 00:00:00', 'USD', 1, 2.28910, 2.29320, 2.28750, 2.29660, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-09 00:00:00', 'EUR', 1, 2.71690, 2.72180, 2.71500, 2.72590, 0.00000, 0.00000, 1.18100);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-09 00:00:00', 'IRR', 100, 0.00010, 0.00010, 0.00000, 0.00000, 272.94000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-09 00:00:00', 'JPY', 100, 0.01920, 0.01940, 0.01920, 0.01940, 1.19310, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-09 00:00:00', 'USD', 1, 2.30050, 2.30470, 2.29890, 2.30820, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-08 00:00:00', 'EUR', 1, 2.71990, 2.72480, 2.71800, 2.72890, 0.00000, 0.00000, 1.17870);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-08 00:00:00', 'IRR', 100, 0.00010, 0.00010, 0.00000, 0.00000, 272.94000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-08 00:00:00', 'JPY', 100, 0.01920, 0.01930, 0.01910, 0.01940, 1.19780, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-08 00:00:00', 'USD', 1, 2.30760, 2.31180, 2.30600, 2.31530, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-07 00:00:00', 'EUR', 1, 2.75670, 2.76170, 2.75480, 2.76580, 0.00000, 0.00000, 1.18540);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-07 00:00:00', 'IRR', 100, 0.00010, 0.00010, 0.00000, 0.00000, 272.63000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-07 00:00:00', 'JPY', 100, 0.01950, 0.01960, 0.01940, 0.01970, 1.19070, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-07 00:00:00', 'USD', 1, 2.32550, 2.32970, 2.32390, 2.33320, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-06 00:00:00', 'EUR', 1, 2.77360, 2.77860, 2.77170, 2.78280, 0.00000, 0.00000, 1.19160);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-06 00:00:00', 'IRR', 100, 0.00850, 0.00860, 0.00000, 0.00000, 27232.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-06 00:00:00', 'JPY', 100, 1.95050, 1.96340, 1.94330, 1.97090, 119.05000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-06 00:00:00', 'USD', 1, 2.32770, 2.33190, 2.32610, 2.33540, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-05 00:00:00', 'EUR', 1, 2.79310, 2.79810, 2.79110, 2.80230, 0.00000, 0.00000, 1.19300);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-05 00:00:00', 'IRR', 100, 0.00860, 0.00870, 0.00000, 0.00000, 27233.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-05 00:00:00', 'JPY', 100, 1.94150, 1.95440, 1.93430, 1.96180, 120.29000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-05 00:00:00', 'USD', 1, 2.34110, 2.34530, 2.33950, 2.34880, 1.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-02 00:00:00', 'EUR', 1, 2.82580, 2.83090, 2.82380, 2.83510, 0.00000, 0.00000, 1.20510);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-02 00:00:00', 'IRR', 100, 0.00860, 0.00870, 0.00000, 0.00000, 27174.00000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-02 00:00:00', 'JPY', 100, 1.94190, 1.95470, 1.93470, 1.96210, 120.47000, 0.00000, 0.00000);
INSERT INTO `sm_kurlar` (`Tarih`, `Kod`, `Carpan`, `DovizAlis`, `DovizSatis`, `EfektifAlis`, `EfektifSatis`, `USDParite`, `EuroParite`, `DigerParite`) VALUES ('2015-01-02 00:00:00', 'USD', 1, 2.34490, 2.34910, 2.34330, 2.35260, 1.00000, 0.00000, 0.00000);
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen cengaver »

Bu konuda bilgisi olan yok mu?
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen warder »

Verileri program üzerinden sorguluyorsanız hafta sonu hangi veriyi sunmak istiyorsanız sorgunuzu ona uygun yapabilirsiniz.
Örneğin Cumartesi ve pazar için en son cuma verilerini kullanmak isterseniz sorgunuzda o tarihi kullanabilirsiniz.
Bunu düşünmemiş olacağınızı sanmıyorum. Bu durumda sorunuz anlaşılmaz veya belirsiz...
Haftanın günü için çeşitli delphi fonksiyonları mevcut. Forumda da yakın zamanda işlendi.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen cengaver »

Verileri programdan sorguluyorum fakat bunu ben manuel olarak yapmıyorum. Bir zamanlayıcı var ve saati geldiğinde devreye giriyor. Zamanlayıcıyı cumartesi ve pazar gününe göre ayarlayabilirim fakat burada mesele resmi ve idari tatil günlerinin olduğu zamanlarda kur bilgisinin TCMB tarafından yayınlanmaması. Bu noktada zamanlayıcının bakması gereken şey en son yayınlanan kur bilgisine ulaşabilmek. O nedenle bunu SQL üzerinden çözmeye çalışıyorum.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen warder »

today.xml tatil günleri son kurları (önceki son) vermiyor muydu?
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen cengaver »

warder yazdı:today.xml tatil günleri son kurları (önceki son) vermiyor muydu?
E Bayram günü bakarsan TCMB'den alabilirsin tabi... Bu sorun ile ilgili SQL kapsamında bir öneriniz var mı? Çünkü ben sorumu SQL ile ilgili olarak sordum. SQL dışındaki bir cevap da benim işimi görmeyecek. Hani SQL konusunda bir öneride bulunabilir misiniz......................................
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen warder »

Henüz hiç kullanmadım ama sql içerisinde while döngüsü oluşturabilirsiniz. While dan çıkış kriteri olarak da kur bilgisi alan select inizin kayıt sayısını kullanıp; kayıt bulana kadar sorduğu tarihi gün gün azaltarak tekrarlamasını sağlayabilirsiniz.
Bunu başardığınızda önceki sona ulaşabilirsiniz.
Kolay gelsin...
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen mussimsek »

Verilen tarih ve öncesinden son döviz kurunu almanız lazım. Kullanıcı 5 Ocak vermişse, 5 ocak ve öncesinden en son kayıt hangisi ise onu getirmeniz lazım. Ben şuna benzer bir kod kullanmıştım :

Kod: Tümünü seç

select top 1 @DLR_DOLAR_KURU=DK.dov_fiyat1
      from DOVIZ_KURLARI as DK with (NOLOCK)
      where DK.dov_tarih<=@DLR_VERILEN_TARIH
      order by dov_tarih desc 
Kolay gelsin.
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Haftasonu ve tatillerdeki kur değerlerini seçmek

Mesaj gönderen cengaver »

Peki, aynı soruyu farklı bir açıdan sorayım;

Tarihe göre sıralanacak şekilde bir JOIN nasıl kurabilirim?
Cevapla