Oracle-SQL- Tarihe göre ilk-son olan kayıtları görme

Oracle 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ı
Kacak
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 01:59
Konum: Ankara

Oracle-SQL- Tarihe göre ilk-son olan kayıtları görme

Mesaj gönderen Kacak » 01 Şub 2010 10:18

Tarih - Zaman Numara Baz İstasyonu Adı
01/01/2007 11:22:32 532*** 123456789 - IS12345 - BASAKSEHIR 1. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 12:58:12 532*** 123456789 - IS12345 - BASAKSEHIR 2. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 12:59:42 532*** 123456789 - IS12345 - BASAKSEHIR 2. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 14:15:52 532*** 123456789 - IS12345 - BASAKSEHIR 3. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 17:32:52 532*** 123456789 - IS12345 - BASAKSEHIR 5. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 18:12:32 532*** 123456789 - IS12345 - BASAKSEHIR 7. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 22:29:32 532*** 123456789 - IS12345 - BASAKSEHIR 9. ETAP TURK TELEKOM BINASI,İSTANBUL
01/01/2007 22:39:32 532*** 123456789 - IS12345 - BASAKSEHIR 2. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 11:22:32 532*** 123456789 - IS12345 - BASAKSEHIR 1. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 12:50:22 532*** 123456789 - IS12345 - BASAKSEHIR 2. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 12:55:52 532*** 123456789 - IS12345 - BASAKSEHIR 2. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 14:25:32 532*** 123456789 - IS12345 - BASAKSEHIR 3. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 15:32:22 532*** 123456789 - IS12345 - BASAKSEHIR 5. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 18:11:12 532*** 123456789 - IS12345 - BASAKSEHIR 7. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 22:23:12 532*** 123456789 - IS12345 - BASAKSEHIR 9. ETAP TURK TELEKOM BINASI,İSTANBUL
02/01/2007 22:39:32 532*** 123456789 - IS12345 - BASAKSEHIR 3. ETAP TURK TELEKOM BINASI,İSTANBUL

Yukarıdaki gibi bir Oracle veritabanında numaranın her gün ilk olarak hangi bazda iken ilk görüşmesini yaptığını ve aynı gün hangi bazda iken son telefon görüşmesini yaptığını listelemek istiyorum. Yani sadece renkli işaretli olan satırları listelemek istiyorum. Tüm veriler tamamen hayali ve değiştirilmiştir. Yardımcı olabilecek veya fikir verebilecek arkadaşlara şimdiden teşekkürler.

Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: Oracle-SQL- Tarihe göre ilk-son olan kayıtları görme

Mesaj gönderen Hakan Can » 02 Şub 2010 09:35

Şuna benzer bir query'yi dener misin?

Kod: Tümünü seç

SELECT
  DISTINCT T1.TARIH, T1.ZAMAN, T1.NUMARA, T1.BAZ_ISTASYONU
FROM TABLO T1
  INNER JOIN
    (
     SELECT
       TARIH, NUMARA, MIN(ZAMAN) AS ZAMAN
     FROM TABLO
     GROUP BY TARIH, NUMARA
     UNION
     SELECT
       TARIH, NUMARA, MAX(ZAMAN) AS ZAMAN
     FROM TABLO
     GROUP BY TARIH, NUMARA
    ) T2 ON T2.TARIH = T1.TARIH AND T2.ZAMAN = T1.ZAMAN AND T2.NUMARA = T1.NUMARA

Kullanıcı avatarı
Kacak
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 01:59
Konum: Ankara

Re: Oracle-SQL- Tarihe göre ilk-son olan kayıtları görme

Mesaj gönderen Kacak » 06 Şub 2010 10:48

Hakan Can arkadaşıma teşekkür ederim. Oldukça güzel bir SQL hazırlayıp göndermiş. Gönderdiğiniz SQL çalışıyor, sonucunda ilk ve son saat ayrı satırlarda geliyor. Ben aynı satırda görmeyi istemiştim. Bir VIEW create edip kayıtları önce orada filtreleyip daha sonra da o view'i kullanıp sonuçları aynı satırda getirmeyi başardım.

create or replace view ilk_son_saat as
select numara,tarih,min(t.zaman)isaat ,max(t.zaman) ssaat
from tablo t
group by numara,tarih
order by 1 asc,2 asc

Böylece her güne ait ilk ve son saatleri bulduk. Gelelim bunları kullanarak bu görüşmelerin nerelerde yapıldıklarını bulmaya..

select a.NUMARA ,a.tarih,b.zaman "İlk Gör.Saati" ,b.baz "İlk Gör.Cell",c.zaman "Son Gor.Saati",c.baz "Son Gör.Cell"
from ilk_son_saat as a ,tablo b, tablo c
WHERE (a.numara=b.numara and a.tarih=b.tarih and a.isaat=b.zaman)
and (a.numara=c.numara and a.tarih=c.tarih and a.ssaat=c.zaman)
group by a.numara,a.tarih,b.zaman,b.baz_numara,c.zaman,c.baz_numara
order by 1 asc,2 asc

Herkese kolay gelsin. Umarım benzer SQL lerde de yardımcı oluruz birbirimize.

Cevapla