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:
Lo intenté con:
SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC
no funciona
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