151 votes

Comment utiliser DISTINCT et ORDER BY dans la même instruction SELECT ?

Après avoir exécuté la déclaration suivante :

SELECT  Category  FROM MonitoringJob ORDER BY CreationDate DESC

Je reçois les valeurs suivantes de la base de données :

test3
test3
bildung
test4
test3
test2
test1

mais je veux que les doublons soient supprimés, comme ceci :

bildung
test4
test3
test2
test1

J'ai essayé d'utiliser DISTINCT mais cela ne fonctionne pas avec ORDER BY dans une déclaration. Merci de m'aider.

Important :

  1. J'ai essayé avec :

    SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC

    cela ne fonctionne pas.

  2. L'ordre par date de création est très important.

1voto

Bob Points 1
if object_id ('tempdb..#tempreport') is not null
begin  
drop table #tempreport
end 
create table #tempreport (
Category  nvarchar(510),
CreationDate smallint )
insert into #tempreport 
select distinct Category from MonitoringJob (nolock) 
select * from #tempreport  ORDER BY CreationDate DESC

-1voto

C Patel Points 21

Distinct permet de trier les enregistrements par ordre croissant. Si vous souhaitez les trier dans l'ordre décroissant, utilisez :

SELECT DISTINCT Category
FROM MonitoringJob
ORDER BY Category DESC

Si vous souhaitez trier les enregistrements sur la base du champ CreationDate, ce champ doit figurer dans l'instruction de sélection :

SELECT DISTINCT Category, creationDate
FROM MonitoringJob
ORDER BY CreationDate DESC

-1voto

Jair Points 1

Vous pouvez utiliser CTE :

WITH DistinctMonitoringJob AS (
    SELECT DISTINCT Category Distinct_Category FROM MonitoringJob 
)

SELECT Distinct_Category 
FROM DistinctMonitoringJob 
ORDER BY Distinct_Category DESC

-1voto

Channa Points 68

Par sous-requête, cela devrait fonctionner :

    SELECT distinct(Category) from MonitoringJob  where Category in(select Category from MonitoringJob order by CreationDate desc);

-1voto

Jiten Suthar Points 77

Nous pouvons le faire en sélectionnant une sous-requête

Voici la requête :

SELECT * FROM (
    SELECT DISTINCT Category FROM MonitoringJob
) AS Tbl
ORDER BY Tbl.CreationDate DESC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X