Я использую функцию ROW_NUMBER в sql в разделе результирующего набора, где я хочу только первую строку в каждом разделе. Вот запрос:SQL Partition by
Select A, B, C, ROW_NUM
FROM
(SELECT A,B,C, ROW_NUMBER() OVER (PARTITION BY A ORDER BY C DESC) AS R0W_NUM
FROM TABLE
)X
WHERE ROW_NUM = 1
Это дает желаемые результаты.
Но вместо этого, теперь я использую функцию FIRST_VALUE следующим образом:
SELECT A,B,C, FIRST_VALUE(C) OVER (PARTITION BY A ORDER BY C DESC) AS ROW_NUM
FROM TABLE
Но приведенный выше запрос дает мне дублируют значения, а также. Может ли кто-нибудь вести меня о том, как мне избавиться от дубликатов? Я пробовал использовать DISTINCT, не помогает.
Вы можете заменить все ваши 'A, B, C'' FIRST_VALUE () 'и повторять' OVER() 'предложения, чтобы получить тот же набор результатов, но зачем вам? Какова фактическая мотивация здесь, если 'ROW_NUMBER()' уже выполняет правильную работу? Или, если он не выполняет правильную работу, чего вы на самом деле пытаетесь достичь здесь? –
Обязательно пометьте SQL-запросы соответствующим диалектом ('tsql', я верю?), Чтобы помочь специалистам в этом диалекте (так как существуют существенные различия между диалектами SQL). – Amadan
Как насчет использования 'SELECT DISTINCT'? – user4759923