Для ручного анализа мне нужно было получить 10 последних использованных кодов с примерно таким оператором SQL:
SELECT DISTINCT TOP (10) [Status]
FROM [Orders]
ORDER BY [OrderId] DESC
который не является допустимым SQL и приводит к ошибке
Элементы ORDER BY должны появиться в списке выбора, если указано SELECT DISTINCT.
Мне удалось обойти это с помощью такого запроса:
WITH X AS
(
SELECT TOP(1000) [Status]
FROM [Orders]
ORDER BY [OrderId] DESC
)
SELECT DISTINCT *
FROM X;
И, методом проб и ошибок, регулируя количество записей, я получил свои 10 записей, и проблема решена.
Но в глубине моей головы все еще звучит голос, который продолжает спрашивать: «Но как я могу добиться этого с помощью одного запроса?»
Есть идеи?
@GSerg: Как я уже писал, я возился с количеством записей. Начал с 1000, потом увеличил до 10000 и т. д. Пристрелка в артиллерийском стиле...





Почему бы не заказать MAX(OrderId)?
SELECT TOP (10) [Status]
FROM dbo.[Orders]
GROUP BY [Status]
ORDER BY MAX([OrderId]) DESC;
problem solved- это? Эти топ-1000 записей могут содержать только 9 уникальных статусов. Запись 1001 будет содержать 10-й статус, но вы его не увидите.