Как выбрать уникальные значения из таблицы? - PullRequest
0 голосов
/ 22 ноября 2011

Я пытался использовать приведенный ниже запрос, но не смог получить различные значения столбца status_id.

select distinct status_id, schedule_id, cassay_id, time_of_day,
                days, notify_to_addresses, active FROM ordertest

Цель вышеприведенного запроса - отфильтровать таблицу, чтобы получить уникальное значение столбца 'status_id', в то же время необходимо получить значения для всех столбцов, представленных в таблице. Так что моя финальная таблица будет состоять из различных значений status_id и соответствующих им других значений.

Ответы [ 3 ]

0 голосов
/ 22 ноября 2011

DISTINCT работает для каждой строки, другие поля не одинаковы для всех отдельных status_id, поэтому вы не можете использовать DISTINCT.

Использовать GROUP BY и использовать групповые функции (MAX,MIN,WM_CONCAT ЧТО ВАМ НУЖНО ) для других столбцов.

ИЛИ используйте subqueries для primary key для каждого столбца.

0 голосов
/ 22 ноября 2011
WITH DISTINCT_STATUS
AS
(
-- this one will query distinct status id values
   select DISTINCT status_id FROM ordertest
)
-- this query will give extra information in that rows.
select distinct T.status_id, T.schedule_id, T.cassay_id, T.time_of_day,
            T.days, T.notify_to_addresses, T.active 
FROM ordertest T 
INNER JOIN 
DISTINCT_STATUS DS
ON DS.status_id = T.status_id
0 голосов
/ 22 ноября 2011

Этот запрос будет возвращать уникальные идентификаторы status_id, но только если комбинация этих status_id и каждого из этих других полей также уникальна.Вы можете выбрать уникальные идентификаторы status_id, но не можете вернуть все значения других полей, если для каждого status_id имеется более одной комбинации.

[edit]

Если вы хотите, чтобы только первая запись длякаждый статус:

select 
  status_id, schedule_id, cassay_id, time_of_day, days, notify_to_addresses, active 
from
  (select 
    row_number() over (partition by status_id order by 1) as number, 
    status_id, schedule_id, cassay_id, time_of_day, days, notify_to_addresses, active 
  FROM ordertest)
where
  number = 1

Вместо row_number, dense_rank и rank используются также для различных видов нумерации, но в этом случае вы действительно хотите одну строку, и row_number будетдостаточно.

Не уверен, order by является обязательным.Если нет, вы можете оставить это.Если это так, вы можете указать фиктивное значение или указать конкретное поле, которое вы хотите использовать в качестве «первой строки».Например, введите spedify order by schedule_id, чтобы вернуть наименьшее значение schedule_id для каждого идентификатора status_id.

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