这是我的查询,未返回RegistrationDate Desc
排序的正确结果:
SELECT
Team,
CONVERT(VARCHAR(10), RegistrationDate, 103) AS RegistrationDate,
FormFilledAt, CreationBy
FROM
Table_Candidate_Info
WHERE
Status = 'Completed'
GROUP BY
Team, CONVERT(VARCHAR(10), RegistrationDate, 103), FormFilledAt, CreationBy
ORDER BY
RegistrationDate DESC
如果我要使用此查询,它将以RegistrationDate Desc
select *
from Table_Candidate_Info
order by RegistrationDate desc
我希望上面的第一个查询应该是Desc的RegistrationDate顺序和按查询的分组
答案 0 :(得分:1)
尝试
order by CONVERT(VARCHAR(10),RegistrationDate,103) desc
或者更好,如果您想真正按日期(而不是文本)保持顺序,请尝试以下操作:
select Team, CONVERT(VARCHAR(10),RegistrationDate,103) as RegistrationDate, FormFilledAt,CreationBy
from (
Select Team, cast(RegistrationDate as date) as RegistrationDate ,FormFilledAt,CreationBy
from Table_Candidate_Info
where Status='Completed'
group by Team,cast(RegistrationDate as date) ,FormFilledAt,CreationBy
) tmp
order by RegistrationDate desc
注意:如果要按日期和时间分组,请删除演员表…作为日期
答案 1 :(得分:1)
在distinct
子句中使用CONVERT(VARCHAR(10),RegistrationDate,103)
和order by
Select distinct Team,CONVERT(VARCHAR(10),RegistrationDate,103)as RegistrationDate ,FormFilledAt,CreationBy
from Table_Candidate_Info where Status='Completed'
order by CONVERT(VARCHAR(10),RegistrationDate,103) desc
注意:由于您没有使用任何聚合函数,因此不需要分组依据
答案 2 :(得分:1)
在RegistrationDate
子句中将结果转换为varchar
时,Select
不按结果排序的原因是因为Order By
子句在评估后被逻辑处理(位于Select
子句中)。
现在,在您写第一个查询时
Select * from Table_Candidate_Info order by RegistrationDate desc
[尽管在选择列表中写*是非常不习惯的做法] RegistrationDate格式仍保留在Select
子句中,但在Order By
子句的进一步逻辑处理阶段仍然适用。因此,31.01.2019
首先出现,31.12.2018
之后出现。
但是,当您将其转换为varchar(10)
以获得所需的格式时,实际上Order By
子句将对Varchar
而不是Date
进行排序。因此,31/12/2018
首先出现,31/01/2019
之后出现。
要解决此问题,如果您想保留Select
中datetime / date列的格式,但将Order By
保留为Date
的值,则只需将datetime列转换回{{1} }在Date
子句中。
伪代码为:
Order by
此处的演示链接:https://rextester.com/WMLQL78387