SQL Server: GROUP BY datetime без галочек - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть запрос, который возвращает все записи, с уникальными 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 ]

3 голосов
/ 30 ноября 2011

В каждой группе есть несколько возможных значений datetime, поэтому вместо

ORDER BY t.date

вы можете использовать, например

ORDER BY MIN(t.date)

чтобы избежать этой ошибки.

2 голосов
/ 30 ноября 2011

Это прекрасно работает:

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) 
1 голос
/ 30 ноября 2011

Вы должны ORDER BY выражения в GROUP 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...