sorgu yardimi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

sorgu yardimi

Mesaj gönderen sadikacar60 »

arkadaslar asagidaki sorguyu duzenlemek istiyorum yardimci olabilirmisiniz.

en son kayittan geriye geriye dogru dunun tarihine kadar olan PARA alanidaki kayitlarin toplamini almam lazim.
baya zamandir delphiye elimi surmedim biraz denedim ama kafa basmadi yardimci olursaniz sevinirim saygilar.

Kod: Tümünü seç

sql:='SELECT SUM (PARA),SUM(OYADET) FROM TBL_KASA WHERE ((DATE_='''+tarih+''' AND CAST(substring(DATE_TIME from 1 for 2) AS INTEGER)>=8) OR (DATE_='''+DateToStr(StrToDate(tarih)+1)+''' AND CAST(substring(DATE_TIME from 1 for 2) AS INTEGER)<=7)) and not PARA=0 ';
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: sorgu yardimi

Mesaj gönderen ertank »

Merhaba,

Yapmak istediğinizi daha detaylı ifade etmeniz mümkün mü? "Dünün tarihine kadar" ifadesini ben bugün olarak algılıyorum. Doğru mudur?
Tablo "create table" bilgisini paylaşabilir misiniz? PARA NULL değer alabiliyor mu bildirmemişsiniz. Keza OYADET için de benzer durum söz konusu.
Kullandığınız FirebirdSQL sürümü nedir?
Filtrelemeye çalıştığınız 7 ve 8 değerleri ay olarak mı filtrelemek istiyorsunuz? Gün olarak mı?
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sorgu yardimi

Mesaj gönderen sadikacar60 »

gecikme icin kusura bakmayin.

ID TARIH ---- PARA
1. 20.11.2022 50
2. 20.11.2022 60
3. 20.11.2022 20
4. 21.11.2022 10
5. 21.11.2022 40
6. 15.02.2019 30
7. 21.11.2022 70

burda id sirayla kaydediyor ama pc tarihini degistirip araya farkli tarihli kayit ekleniyor.
tarihe gore 21 kasim raporunu cikardigimda hasilat 120 cikiyor oysa hasilat 150 olmali tarih degistirip araya kacak oyun acilmis
hasilatin kontrolu icin yedek bir sorgu yapmak istiyorum burda
ben 7 inci kayittan geriye dogru dunun tarihi yani 20 sine gelene kadar para hucresini toplarsam gercek hasilata ulasabilirim.
kayitlari sondan dongu ile cekmeyi deneyecegim bakalim becerebilecekmiyim
saygilar
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: sorgu yardimi

Mesaj gönderen ertank »

Yine istenilen bilgilerin tamamını paylaşmamışsınız.

"DATE_" kolonunun türünün timestamp olduğunu varsayarak basitçe aşağıdaki şekilde çalışmıyor mu?

Kod: Tümünü seç

Query.SQL.Text := 'SELECT SUM (PARA), SUM(OYADET) FROM TBL_KASA WHERE DATE_=:ADATE ORDER BY DATE DESC';
Query.Params[0].AsDateTime := DateTimePicker1.Date;
Qoery.Open();
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sorgu yardimi

Mesaj gönderen sadikacar60 »

Kod: Tümünü seç

     CREATE TABLE TBL_KASA (
         ID         INTEGER NOT NULL,
         BID        VARCHAR(20),
         DATE_      VARCHAR(50),
                                                                                                                                                              
        LANE       VARCHAR(10),
        OYADET     INTEGER,
        PARA       INTEGER,
        PTUR       VARCHAR(100) DEFAULT 0,
        DATE_TIME  VARCHAR(8),
        NOTT       VARCHAR(250),
        USER1      VARCHAR(20)
    );
tablo bu sekilde ama PARA ID VE TARIH_ HUCRELERINI KULLANARAK RAPOR OLUSTURMAYA CALISIYORUM.
BEN en son id alip geriye dogru dunun tarihine kadar gitmeyi deneyecegim
saygilar
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: sorgu yardimi

Mesaj gönderen ertank »

Bu şekilde işiniz biraz zor.
DATE_ kolonunu TIMESTAMP yapmış olmalıydınız. Sıralamayı sizin için veritabanı yapardı.
1- DATE_ kolonu verilerini nasıl kayıt ediyorsunuz? gg.yy.yyyy şeklinde mi? Örnek veritabanı içinden ham tarih bilgisi paylaşabilir misiniz?
2- Uygulama Türkçe işletim sistemi ile mi çalışıyor?
3- WIN1254 karakter kod sayfasını bağlantı ayarlarında parametre olarak kullanıyor musunuz?

Bir ihtimal veritabanına DATE_ kolonunu TIMESTAMP veya DATE veri türüne çevirmesini (CAST) sağlayarak yine sıralamayı veritabanına yaptırmak mümkün olabilir.
sadikacar60
Üye
Mesajlar: 83
Kayıt: 28 Ara 2017 04:14
İletişim:

Re: sorgu yardimi

Mesaj gönderen sadikacar60 »

Date kolonunu 21.11.2022 seklinde string olarak kullaniyorum. Pc tarihide o sekilde ayarli turkce isletim ile calisiyor. Win1254 tablo olustururken tanimlaniyor otomatik.
Bu kod gunde 1 kere kullanilacak zaten ciddi bir hataya neden olmazsa boyle kalsin

Ilginize tesekkur eder saygilar sunarim.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: sorgu yardimi

Mesaj gönderen ertank »

Aşağıdaki şekilde denediğimde sorunsuz çalıştı. Tarih sıralı olarak geliyor veriler. Siz gerekli diğer filtreleme koşullarını ekleyebilirsiniz.

Kod: Tümünü seç

SELECT cast(date_ as date) as DATE_, SUM(PARA), SUM(OYADET) FROM TBL_KASA GROUP BY 1 ORDER BY 1 DESC
Not: Sorgu içindeki DATE_ veri türü TDate şeklinde olacaktır.
Cevapla