2011-07-09 139 views
1

以下作品的独特和秩序,但我想有它独特的选择办法以及SQL帮助与日期

select convert(nvarchar(10),datestart,103) 
from o_course 
order by convert(datetime, datestart, 103) desc 

,但如果我将其更改为

select distinct convert(nvarchar(10),datestart,103) 
from o_course 
order by convert(datetime, datestart, 103) desc 

我得到

消息145,级别15,状态1,行1 如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在选择列表中。

我的目标是从日期时间字段中获取所有不同的日期,并按降序对它们进行排序。

任何帮助将不胜感激。

回答

0

错误消息告诉你什么是错的。这是解决这个问题的一种方法:

select distinct convert(nvarchar(10),datestart,103) 
from o_course 
order by convert(nvarchar(10), datestart, 103) desc 
+0

这将修复错误信息,但会给出错误的数据。它会在dd/mm/yyyy字符串上排序,而不是基础日期 – gbn

+0

感谢oded,但它不按降序对结果进行排序。 – wizzykidd

0

我认为这将有助于你:

select somedate from (select distinct convert(nvarchar(10),datestart,103) as somedate 
from o_course) t order by somedate desc 
+0

这将排序在dd/mm/yyyy字符串上,而不是基础日期 – gbn

+0

datestart是什么类型? – antonversal

1

单独从排序是这样的DISTINCT。

select 
    convert(nvarchar(10), foo.datestart, 103) 
from 
    (SELECT DISTINCT datestart FROM o_course) foo 
order by 
    foo.datestart DESC 
+0

谢谢兄弟,我非常欣赏这一点,它的工作原理。 – wizzykidd

+0

@wizzykidd:请注意关于投票和接受答案的常见问题。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work如果这个答案最适合你,请用左边的勾号接受。谢谢。 – gbn

0

使用GROUP BY而不是distinct。

select convert(nvarchar(10),datestart,103) 
from o_course 
group by convert(nvarchar(10),datestart,103) 
order by convert(datetime, datestart, 103) desc