select first and skip ile belli sayida order desc yapma

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
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

select first and skip ile belli sayida order desc yapma

Mesaj gönderen musti »

s.a

Yapmak istediğim bir tabloda bir alanı sıralama sınav bıtıs alanı (TIME1) bu sıralama sonucunda ilk 10 'u ters sıralama ve kalanları yine normal sıralamak bu aşağıdaki kodla yaptım ama kalanları skıp 10 ile alıp unıon ile birleştiremedim.
ilk sıralma ile alınan sonuc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
.
bu sonucu ilk 10 ' u ters cevır sırala kalanı altına ekle

10
9
8
7
6
5
4
3
2
1
11
12
13
14
.
.

Kod: Tümünü seç

SELECT FIRST 10 TIME1 FROM
  (
   SELECT FIRST 10  TIME1 FROM EXAMPL  ORDER BY TIME1 ASC
  )
     ORDER BY TIME1 DESC  )AS EXAMPL

teşekkür ederim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen Hakan Can »

Şuna benzer bir SQL cümlesi kullanabilirsin:

Kod: Tümünü seç

SELECT
  T1.*
FROM
 (
  SELECT
    FIRST 10 *
  FROM NET_MIKTAR
  ORDER BY MAYIS DESC
 ) T1
UNION ALL
SELECT
  T1.*
FROM
 (
  SELECT
    FIRST 10 *
  FROM NET_MIKTAR
  ORDER BY MAYIS ASC
 ) T1
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen musti »

:( olmuyor boyle denedim
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen Kuri_YJ »

Selamlar,

Tavsiye,

1. Ters sıralama filan kullanıyorsan, yada MAX gibi işlemler yapıyorsan, tablolarına ilgili alanlar için DESC index tanımla,
2. UNION edeceğin bir şey varsa, sıralamayı orada değil, daha sonrasında yap.

Örneğin,
İlk 10 Kaydı çektiğin bir Query yaz,
Sonra Diğer 10 Kaydı Çektiğin ikinci Query yaz,
Bunları ayrı ayrı VIEW'ler haline getir
Daha sonra Bir başka VIEW oluştur ve
SELECT * FROM V1
UNION ALL
SELECT * FROM V2

diyerek 3. bir VIEW yap,

Programdan da
SELECT * FROM V3
ORDER BY Field1, Field2 ASC (DESC Artık hangisini istersen)


Bu şekilde biraz uzun yol olur ama verilerin sağlamlığından ve çalışacağından emin olursun. Topu topu 10-15 kayıt çekeceğin için de ve gerekli alanlarda DESC indekslerin olacağı için sıkıntı yaşamazsın. Eğer Performans sorunu yaşarsan, Query'lerini ve VIEW'lerini oluşturduktan sonra buraya yaz, ondan sonra bakarız perfformans için,

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen musti »

tavsiyeniz için teşekkürler.

Ama view da param olmadı için sayı da sabit olmadığı için olmuyor.
yani bu ilk 10 kullanıcıya göre 5 de olabilir 7 de. yada sadece secilenlerde olabilir(DBGrıd1le yani ) 1,5,6,9,11,12 sec bunları desc yap da dıyilebilir. o yüzden view la olmuyor.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen Kuri_YJ »

O zaman şöyle yapabilirsin,

Bir adet SP Hazırla,

SP'de SELECT'leri tek tek çekip Temporary Memory table'a kayıtları INSERT et, SP'nin çıkışında oluşan Temporary Table'ı Result Olarak Döndür !...

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen musti »

SQL ile Temporary Memory table oluşturmayı ve insert etmeyi bilmiyorum. Denemedim hiç.
Sanırım beni ugraştıracak gibi. SQL ile selectle çözmeye ugraşsam daha iyi olacak gibi.
Basit bir işmi Temporary Memory tablela yazmak elinizde basit bir örnek varmı ?

teşekkür ederim.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen Kuri_YJ »

Selamlar,

http://www.firebirdsql.org/rlsnotesh/rl ... globaltemp

Bu adreste Global Temporary Table diye aratırsan sayfada, açıklaması var. Ayrıca diğer dökümanları da incele yada Internette arama yap Firebird Global Temporary Table olarak. Sanırım örnekler bulabilirsin. Ben uzun süredir FB kullanmıyorum (geçende arkadaşıma yazdığım basit proje dışında) o sebeple elimde hiç örnek yok !...

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen Hakan Can »

Şu SQL komutunu kendi yapına adapte edersen istediğin sonucu alabilirsin:

Kod: Tümünü seç

SELECT T1.* FROM (SELECT FIRST 10 * FROM NET_MIKTAR ORDER BY MAYIS DESC) T1
UNION ALL
SELECT T1.* FROM (SELECT T1.* FROM (SELECT FIRST 2147000000 SKIP 10 * FROM NET_MIKTAR ORDER BY MAYIS DESC) T1 ORDER BY T1.MAYIS ASC) T1
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: select first and skip ile belli sayida order desc yapma

Mesaj gönderen musti »

ufak tefek degişikliklerle sonuç tamam kodun düzenlenmiş halini ekliyorum.
teşekkür ederim.
iyiki varsınız :D

Kod: Tümünü seç

SELECT T1.*
FROM(
SELECT first 10
  T1.*
FROM
(
  SELECT
    FIRST 10 *
  FROM examp
   ORDER BY TIME1 ASC
) T1
    order by TIME1 DESC


     )T1

     UNION ALL

SELECT T1.*
 FROM (SELECT T1.* FROM (
SELECT SKIP 10  FROM examp  
ORDER BY TIME1 ASC) 
T1 ORDER BY T
1 TIME1 ASC) T1

Cevapla