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ş:
Nasıl bir kayıt (select top 1) Her kay...
Nasıl tablolar referans Oracle belirli...
Nasıl kayıt raylar tarafından bugün ya...
Sql Server Oracle ler OLUŞTURMAK VEYA ...
HTML5 kayıt dosyası için ses...