это мой запрос
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
Павел, спасибо, добавил. Я использую SQL Server 2014.


Я не знаю, принимает ли ваш вариант 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. как я могу это решить?
Добавьте DISTINCT к первому выбору.
DISTINCT по-прежнему не решал повторяющиеся строки с идентификаторами 886 и 726, ответ Кебиса на данный момент мне подходит, но я ценю ваш ответ. У меня есть чему поучиться из этих двух запросов, которые вы прислали.
попробуйте этот запрос
SELECT id,MAX(SMFU_nNEWNAIYO)
FROM O_SMFU
GROUP BY id
Этот запрос даст вам данные, которые вы хотите получить
Пожалуйста, добавьте тег для базы данных, которая у вас есть.