2010-09-05 22 views
14

Sorguda döndürülen tüm öğelere göre bir sorgudaki tek bir öğenin göreceli konumunu nasıl alacağımı bulmaya çalışıyorum. ÖrneğinPostgres: Sonuç kümesindeki belirli bir satırın konumunu buldunuz mu?

, cevap olacağını almanın uzun el yol:

single_item = SELECT * FROM table WHERE id=65 
result = SELECT * FROM table WHERE published_date < date_value 
x=1 
foreach(result as item): 
    if(item.id == single_item.id): 
     required_value = x 
    endif 
    x++ 
endforeach 

sadece tek postgres sorgusu required_value almanın basit bir yolu var mı?

cevap

26

kullanımı analytic/ranking/windowing functionality - 8.4 documentation link:

WITH summary AS (
    SELECT t.*, 
      ROW_NUMBER() OVER(ORDER BY t.published_date) AS position 
    FROM TABLE t) 
SELECT s.* 
    FROM summary s 
WHERE s.id = 65 

WITH sözdizimi olmadan Alternatif:

SELECT s.* 
    FROM (SELECT t.*, 
       ROW_NUMBER() OVER(ORDER BY t.published_date) AS position 
      FROM TABLE t) s 
WHERE s.id = 65 

position kolon göre id değeri 65 olan kayıt konumunu temsil eden bir tam sayı değeri olacaktır artan sırayla published_date sütun. Bağlantılı olduğunda konum değerinin çoğaltılmasını istiyorsanız, 'u RANK()

ile değiştirin.
+0

Mükemmel, teşekkürler. – Steerpike

İlgili konular