Есть ли способ не отображать строки с повторяющимся идентификатором в SQL?

это мой запрос

   SELECT * 
FROM O_SMFU WHERE (ID , SMFU_nNEWNAIYO) IN 
( SELECT ID , MAX(SMFU_nNEWNAIYO)
  FROM O_SMFU
  GROUP BY ID 
)

при дублировании идентификатора показывать только строку с максимальным значением SMFU_nNEWNAIYO

но это дает мне ошибку:

Message 4145, Level 15, State 1, Line 49
A non-Boolean expression was specified near',' for a context that requires a condition.

данные у меня есть:

ID        SMFU_nNEWNAIYO
703            1930
703            1920
703            1910
705            1950
725            1900
726            1900
726            1900
886            1900
886            1900

данные, которые я хочу получить:

ID         SMFU_nNEWNAIYO
703            1930
705            1950
725            1900
726            1900
886            1900

Пожалуйста, добавьте тег для базы данных, которая у вас есть.

Paul T. 10.05.2022 03:43

Павел, спасибо, добавил. Я использую SQL Server 2014.

Mehdi 10.05.2022 03:46
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не знаю, принимает ли ваш вариант SQL (SQL Server) этот синтаксис, но в любом случае я бы предложил просто написать ваш запрос как соединение:

SELECT o1.*
FROM O_SMFU o1
INNER JOIN
(
    SELECT ID, MAX(SMFU_nNEWNAIYO) AS MAX_SMFU_nNEWNAIYO
    FROM O_SMFU
    GROUP BY ID 
) o2
    ON o2.ID = o1.ID AND
       o2.MAX_SMFU_nNEWNAIYO = o1.SMFU_nNEWNAIYO;

Другой способ написать запрос на SQL Server:

SELECT TOP 1 WITH TIES *
FROM O_SMFU
ORDER BY RANK() OVER (PARTITION BY ID ORDER BY SMFU_nNEWNAIYO DESC);

Спасибо, Тим, я попробовал этот запрос, и он дал мне две повторяющиеся строки с идентификаторами 886 и 726, возможно, потому, что у этих двух есть повторяющийся идентификатор, а также SMFU_nNEWNAIYO. как я могу это решить?

Mehdi 10.05.2022 03:59

Добавьте DISTINCT к первому выбору.

Tim Biegeleisen 10.05.2022 04:06

DISTINCT по-прежнему не решал повторяющиеся строки с идентификаторами 886 и 726, ответ Кебиса на данный момент мне подходит, но я ценю ваш ответ. У меня есть чему поучиться из этих двух запросов, которые вы прислали.

Mehdi 10.05.2022 04:19
Ответ принят как подходящий

попробуйте этот запрос

SELECT id,MAX(SMFU_nNEWNAIYO)
FROM O_SMFU
GROUP BY id

Этот запрос даст вам данные, которые вы хотите получить

Другие вопросы по теме

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