SQL Server:没有刻度的GROUP BY日期时间

时间:2011-11-30 10:02:27

标签: sql sql-server datetime

我有一个查询,它返回所有条目,唯一的datetime带有刻度:

select t.date, count(*) as Count
    from table t
    group by t.date having count(*) = 1

我需要一个查询,返回带有唯一datetime的条目而不带标记。为了得到datetime没有我正在使用的刻度:

select CONVERT(VARCHAR(19), t.date, 120), count(*) as Count
from table t

所以我期待使用查询:

select CONVERT(VARCHAR(19), t.date, 120), count(*) as Count
    from table t
    group by CONVERT(VARCHAR(19), t.date, 120) having count(*) = 1

但它引发了一个错误:

  

列“table.date”在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY中   子句。

你知道我应该使用什么查询吗?

3 个答案:

答案 0 :(得分:3)

每个组中有多个可能的datetime值,而不是

ORDER BY t.date

你可以使用,例如

ORDER BY MIN(t.date)

以避免此错误。

答案 1 :(得分:2)

这很好用:

select convert(varchar(19), t.date, 120), count(*) as count
from table t
group by convert(varchar(19), t.date, 120) 
having count(*) = 1
order by convert(varchar(19), t.date, 120) 

答案 2 :(得分:1)

您必须在GROUP BY或聚合

中对表达式进行ORDER BY
ORDER BY
   CONVERT(VARCHAR(19), date, 120)

示例:

SELECT
   ShorterDateTime, COUNT(*)
FROM
    (
    select CONVERT(VARCHAR(19), date, 120) AS ShorterDateTime
    from table
    ) t
GROUP BY
   ShorterDateTime
HAVING
   COUNT(*) > 1
ORDER BY
   ShorterDateTime