Проблемы с запросами PostgreSQL - PullRequest
0 голосов
/ 01 марта 2012

У меня есть БД с несколькими таблицами, которые также имеют несколько строк / столбцов с макетом, подобным показанному ниже.

сайт находится в таблице с именами сайтов, а ID и тип в таблице с пометкой Site_EQ

Site  ID Type  
A0004  2 abc
A0004  3 abcd
A0004  4 abcde
A0005  2 abc
A0005  3 abcd
A0005  4 abcde 
A0005  5 abc  
A0005  6 abcd 
A0005  7 abcde

По сути, я пытаюсь отфильтровать результаты по сайту, найдя наибольшее значение идентификатора для сайта и удалив остальные, поэтому, например, если у A0010 были идентификаторы 1-20, я бы хотел, чтобы результат отображался.

A0010 20 Bla

и игнорировать

A0010 1 Bla
A0010 2 Bla

и т. Д., Но я не уверен, как это сделать, поскольку нет установленного номера идентификатора, это может быть 1-3 или 1-30, по сути, я получаю 30 результатов для одного сайта с разницей всего в 1 столбец. (который я хотел бы отфильтровать только на самое высокое значение).

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Попробуйте:

select Site, ID, Type from
(select s.*, row_number() over (partition by Site order by ID desc) rn
 from Site_EQ) q
where rn=1
0 голосов
/ 01 марта 2012

Это должно сделать это:

SELECT T1.Site, T1.ID, T1.Type
FROM SomeTable T1, (SELECT Site, MAX(ID) AS ID
                    FROM SomeTable
                    GROUP BY Site) T2
WHERE T2.Site = T1.Site
AND T2.ID = T1.ID

Хитрость заключается в том, что у вас есть подзапрос, который дает вам Site + максимальный идентификатор, вы не можете получить тип одновременно, хотя из-за группировки, поэтому вам нужно снова соединить его с реальной таблицей.

Здесь вы можете найти объяснение по псевдониму таблицы (T1 и T2):
http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-TABLE-ALIASES

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...