Oracle 11g SQL для получения уникальных значений в одном столбце многостолбцового запроса

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

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

22
задан Ian Cohen 11 June 2009 в 19:42
поделиться

5 ответов

Эрик Петрелье почти прав:

SELECT * FROM TableA
WHERE ROWID IN ( SELECT MAX(ROWID) FROM TableA GROUP BY Language )

Примечание: использование ROWID (уникальный идентификатор строки), а не ROWNUM (который дает номер строки в наборе результатов)

39
ответ дан 29 November 2019 в 03:53
поделиться

Ради эффективности вы хотите использовать данные только один раз, как это делает Харпер. Однако вы не хотите использовать rank (), потому что он даст вам связи, и в дальнейшем вы хотите группировать по языку, а не по языку. Оттуда вы хотите добавить предложение order by, чтобы различать строки, но вы не хотите фактически сортировать данные. Для этого я бы использовал "порядок по нулю" Например

count (*) over (группировать по языковому порядку по нулю)

0
ответ дан 29 November 2019 в 03:53
поделиться

Я бы использовал функцию RANK () в подвыборке а затем просто вытащите строку, где rank = 1.

select person, language
from
( 
    select person, language, rank() over(order by language) as rank
    from table A
    group by person, language
)
where rank = 1
2
ответ дан 29 November 2019 в 03:53
поделиться

Мой Oracle немного устарел, но я думаю, что это сработает:

SELECT * FROM TableA
WHERE ROWID IN ( SELECT MAX(ROWID) FROM TableA GROUP BY Language )
7
ответ дан 29 November 2019 в 03:53
поделиться

Это будет более эффективно, к тому же вы сможете контролировать порядок выбора значение:

SELECT DISTINCT
       FIRST_VALUE(person)
          OVER(PARTITION BY language
               ORDER BY person)
      ,language
FROM   tableA;

Если вы действительно не Неважно, какой человек выбран для каждого языка, вы можете опустить предложение ORDER BY:

SELECT DISTINCT
       FIRST_VALUE(person)
          OVER(PARTITION BY language)
      ,language
FROM   tableA;
11
ответ дан 29 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: