как выбрать только max (положение) из базы данных, где memberid должен быть уникальным - PullRequest
0 голосов
/ 17 ноября 2011

МОЯ таблица -

id  position  some data   
---|--------|------------|
1  | 1      | data       | 
1  | 2      | data       | 
2  | 1      | data       | 
2  | 2      | data       | 
5  | 1      | data       | 
5  | 2      | data       |
5  | 3      | data       | 

. Как мне отформатировать ее следующим образом.так что он показывает только уникальный идентификатор с самой высокой позицией, как показано ниже.Данные представляют собой долготу и широту, поэтому они должны возвращать только верхнюю позицию long и lat.

id  position  some data   
---|--------|------------|
1  | 2      | data       | 
2  | 2      | data       | 
5  | 3      | data       | 

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Вы можете присоединиться к максимально сгруппированному набору;

select *
from the_table inner join (
    select id, max(position) as max_pos
    from the_table
    group by id
    ) as T on the_table.id = T.id and the_table.position = T.max_pos
 order by the_table.id
0 голосов
/ 17 ноября 2011
SELECT id, MAX(position), data
FROM yourtable
GROUP BY id

при условии, что поле id является вашим memberid. Это выберет наибольшую позицию для каждого id. Однако данные - это другое дело. Вам нужны фактические данные, которые находятся в той же записи, что и MAX (позиция), или просто какие-либо данные?

Если вам нужны данные из той же записи, что и максимальный идентификатор,

SELECT yourtable.id, yourtable.position, yourtable.data
FROM yourtable
LEFT JOIN (
   SELECT id, MAX(position) AS position
   FROM yourtable AS child
   GROUP BY id
) AS child ON (yourtable.id = child.id AND yourtable.position = child.position
0 голосов
/ 17 ноября 2011

Предполагая, что данные соответствующим образом реагируют на агрегат, вы можете сделать это:

SELECT id, MAX(position), MAX(some_data)
FROM My_Table
GROUP BY id

Если нет, я считаю, что версия имеет необходимые функции OLAP:

WITH Max_Data as (SELECT id, position, data, 
                         ROW_NUMBER() OVER(PARTITION BY id 
                                           ORDER BY position DESC) as rowNum
                  FROM My_Table)
SELECT id, position, data
FROM Max_Data
WHERE rowNum = 1

Вы будетенужен индекс, который включает position для лучшей производительности.

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