SORU
23 Mart 2010, Salı


Oracle SELECT TOP 10 kayıt

Oracle SQL Deyimi ile büyük bir sorunum var. İlk 10 Kayıtları diğer select deyimi bir listesi STORAGE_DB wich öyle emretti seçmek istiyorum.

Bu tüm kayıtları için gayet iyi çalışıyor:

SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
  FROM HISTORY WHERE 
      STORAGE_GB IS NOT NULL AND 
        APP_ID NOT IN (SELECT APP_ID
                       FROM HISTORY
                        WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009') 

Ama ekliyorum

AND ROWNUM <= 10
ORDER BY STORAGE_GB DESC

im "" Kayıtları. rastgele bir çeşit elde Limit emri önce yer aldığı için sanırım.

Birisi iyi bir çözüm var mı? Diğer sorun: Bu sorgu gerçekten yavaş (10k kayıtları)

CEVAP
23 Mart 2010, Salı


Sorgu içinde geçerli sorgu gibi altına koymak gerekir :

SELECT * FROM (
  SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
  FROM HISTORY WHERE 
    STORAGE_GB IS NOT NULL AND 
      APP_ID NOT IN (SELECT APP_ID FROM HISTORY WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009')
  ORDER BY STORAGE_GB DESC )
WHERE ROWNUM <= 10

Oracle iade edildikten sonra sonucuna rownum geçerlidir.
Sonuç iade edildikten sonra filtre gerekir, bir sorgu gerekli. Ayrıca RANK() Top-N sonuçları almak için işlevini kullanabilirsiniz.

Performans NOT IN NOT EXISTS kullanmayı deneyin. Daha fazlası için this bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • steeletraining

    steeletraini

    28 NİSAN 2010
  • Wild Academy

    Wild Academy

    8 Aralık 2009