varias the specified sintaxis must ejemplos consultas columnas appear sql sql-order-by distinct

the - sintaxis select sql



¿Cómo usar DISTINCT y ORDER BY en la misma instrucción SELECT? (10)

2) Ordenar por CreationDate es muy importante

Los resultados originales indicaban que "test3" tenía resultados múltiples ...

Es muy fácil comenzar a usar MAX todo el tiempo para eliminar duplicados en Group By ... y olvidar o ignorar cuál es la pregunta subyacente ...

El OP supuestamente se dio cuenta de que el uso de MAX le daba el último "creado" y el uso de MIN daría el primer "creado" ...

Después de ejecutar la siguiente declaración:

SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC

Obtengo los siguientes valores de la base de datos:

test3 test3 bildung test4 test3 test2 test1

pero quiero eliminar los duplicados, así:

bildung test4 test3 test2 test1

Traté de usar DISTINCT pero no funciona con ORDER BY en una declaración. Por favor ayuda.

Importante:

  1. Lo intenté con:

    SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC

    no funciona

  2. Ordenar por CreationDate es muy importante.


Distinct clasificará los registros en orden ascendente. Si desea ordenar por orden desc, use:

SELECT DISTINCT Category FROM MonitoringJob ORDER BY Category DESC

Si desea ordenar registros basados ​​en el campo CreationDate, este campo debe estar en la declaración de selección:

SELECT DISTINCT Category, creationDate FROM MonitoringJob ORDER BY CreationDate DESC


El problema es que las columnas utilizadas en ORDER BY no están especificadas en DISTINCT . Para hacer esto, necesita usar una función de agregado para ordenar, y usar un GROUP BY para hacer que el DISTINCT funcione.

Pruebe algo como esto:

SELECT DISTINCT Category, MAX(CreationDate) FROM MonitoringJob GROUP BY Category ORDER BY MAX(CreationDate) DESC, Category


Prueba a continuación, pero no es útil para datos enormes ...

SELECT DISTINCT Cat FROM ( SELECT Category as Cat FROM MonitoringJob ORDER BY CreationDate DESC );


Puedes usar CTE:

WITH DistinctMonitoringJob AS ( SELECT DISTINCT Category Distinct_Category FROM MonitoringJob ) SELECT Distinct_Category FROM DistinctMonitoringJob ORDER BY Distinct_Category DESC


Se puede hacer usando una consulta interna como esta

$query = "SELECT * FROM (SELECT Category FROM currency_rates ORDER BY id DESC) as rows GROUP BY currency";


Si no se desea el resultado de MAX (CreationDate), como en el ejemplo de la pregunta original, la única respuesta es la segunda declaración de la respuesta de Prashant Gupta:

SELECT [Category] FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC

Explicación: no puede usar la cláusula ORDER BY en una función en línea, por lo que la afirmación en la respuesta de Prutswonder no se puede usar en este caso, no puede poner una selección externa alrededor de ella y descartar la parte MAX (CreationDate).


Simplemente use este código, si desea valores de columnas de [Categoría] y [Fecha de creación]

SELECT [Category], MAX([CreationDate]) FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC

O use este código, si solo desea valores de la columna [Categoría].

SELECT [Category] FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC

Tendrás todos los registros distintos que quieras.


SELECT DISTINCT Category FROM MonitoringJob ORDER BY Category ASC


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