如何在同一个SELECT语句中使用DISTINCT和ORDER BY?
执行以下语句之后:
SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC
我从数据库中获得以下值:
test3 test3 bildung test4 test3 test2 test1
但我想删除重复项,如下所示:
bildung test4 test3 test2 test1
我试图使用DISTINCT,但它不能在一个语句中使用ORDER BY。 请帮忙。
重要:
-
我尝试过:
SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC
它不工作。
-
由CreationDatesorting非常重要。
问题是ORDER BY
中使用的列没有在DISTINCT
指定。 为此,您需要使用聚合函数进行sorting,并使用GROUP BY
使DISTINCT
正常工作。
尝试这样的事情:
SELECT DISTINCT Category, MAX(CreationDate) FROM MonitoringJob GROUP BY Category ORDER BY MAX(CreationDate) DESC, Category
如果不需要MAX(CreationDate)的输出 – 就像原始问题的例子 – 唯一的答案是Prashant Gupta的答案的第二个陈述:
SELECT [Category] FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC
说明:不能在内联函数中使用ORDER BY子句,因此在这种情况下,Prutswonder的答案中的语句是不可用的,您不能在外部select它并放弃MAX(CreationDate)部分。
只要使用这个代码,如果你需要[Category]和[CreationDate]列的值
SELECT [Category], MAX([CreationDate]) FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC
或者使用这个代码,如果你只想要[Category]列的值。
SELECT [Category] FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC
你会有所有不同的logging你想要的。
2)由CreationDate命令是非常重要的
原始结果表明“test3”有多个结果…
开始使用MAX可以非常容易地删除Group By …中的重复项,并忘记或忽略潜在的问题…
OP大概意识到,使用MAX给他最后的“创造”和使用MIN会给第一个“创造”…
不同将按升序对logging进行sorting。 如果你想按desc顺序sorting使用:
SELECT DISTINCT Category FROM MonitoringJob ORDER BY Category DESC
如果您想根据CreationDate字段对logging进行sorting,则该字段必须位于select语句中:
SELECT DISTINCT Category, creationDate FROM MonitoringJob ORDER BY CreationDate DESC
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
你可以使用CTE:
WITH DistinctMonitoringJob AS ( SELECT DISTINCT Category Distinct_Category FROM MonitoringJob ) SELECT Distinct_Category FROM DistinctMonitoringJob ORDER BY Distinct_Category DESC
尝试下一步,但对大量数据无用
SELECT DISTINCT Cat FROM ( SELECT Category as Cat FROM MonitoringJob ORDER BY CreationDate DESC );
这可以使用内部查询来完成像这样
$query = "SELECT * FROM (SELECT Category FROM currency_rates ORDER BY id DESC) as rows GROUP BY currency";
SELECT DISTINCT Category FROM MonitoringJob ORDER BY Category ASC