Я пытаюсь ранжировать подмножество данных внутри таблицы, но я думаю, что я делаю что-то неправильно. Я не могу найти много информации о функции rank() для postgres, возможно, я искал не то место. В любом случае:Как оценивать в postgres-запросе
Я хотел бы знать ранг идентификатора, который попадает в кластер таблицы на основе даты. Мой запрос выглядит следующим образом:
select cluster_id,feed_id,pub_date,rank
from (select feed_id,pub_date,cluster_id,rank()
over (order by pub_date asc) from url_info)
as bar where cluster_id = 9876 and feed_id = 1234;
Я моделирующий это после того, как следующий StackOverflow сообщение: postgres rank
Причина, я думаю, что я делаю что-то неправильно, что есть в url_info только 39 строк, которые находятся в cluster_id 9876, и этот запрос длился 10 минут и больше не возвращался. (на самом деле повторно запустил его довольно долгое время, и он не дал никаких результатов, но есть строка в кластере 9876 для id 1234). Я ожидаю, что это скажет мне что-то вроде «id 1234 было пятым по заданным критериям». возвращает относительный ранг в соответствии с моими ограничениями запроса, правильно?
Это Postgres 8.4 кстати.
Вы хотите, чтобы ранг относился к чему? все записи (это ваш запрос выше спрашивает и, вероятно, почему он занимает слишком много времени)? набор записей, выбранных предикатом? некоторые другие группировки? Предложение 'over' должно указывать' partition by', если вы не хотите ранжировать все строки. [Вот учебник по функциям окна] (http://www.postgresql.org/docs/8.4/static/tutorial-window.html) – dbenhur
Я хочу ранжировать относительно pub_date. Возможно, я могу объяснить немного лучше: url_info имеет тысячи URL-адресов. 39 из них объединяют кластер 9876. Выбрав только URL-адрес, который является членом 9876 (url может быть ТОЛЬКО членом одного кластера), я хочу ранжировать URL-адрес (который составляет кластер 9876) в порядке, основанном на pub_date.Я все еще использую разделы, основанные на функциях окна для этого? Я посмотрел URL-адрес, который вы отправили, и похоже, что это относится к элементам ранжирования после того, как я вычислил какое-то значение, которое я здесь не делаю. – WildBill