Допустим, у меня есть эта таблица.
Id CId Date
1 1 2020-12-25 08:44:04.247
2 2 2020-12-25 08:44:04.566
3 2 2020-12-25 08:44:04.111
Я хочу получить CID, которые имеют более одного значения с одинаковой датой, часом, минутами и секундами (мы должны игнорировать миллисекунды)
Например, в этом случае я хочу получить CId = 2:
Или я хочу получить такие результаты
CId CountWIthSameDate Date
1 1 2020-12-25 08:44:04
2 2 2020-12-25 08:44:04
Если я правильно понимаю, вы можете использовать оконные функции и округлить дату до ближайшей секунды:
select t.*
from (select t.*,
count(*) over (partition by dateadd(second, datediff(second, t.date, 0)) as cnt
from t
) t
where cnt > 1;
Это возвращает исходные строки с дубликатами, а не количество.
Если вам просто нужны результаты в виде агрегации:
select cid, dateadd(second, datediff(second, t.date, 0) as date,
count(*)
from t
group by cid,
dateadd(second, datediff(second, t.date, 0);
Вы можете попробовать сделать что-то вроде этого:
SELECT Cid, Count(1) CountWIthSameDate, Format([Date], 'yyyy-MM-dd hh:mm:ss') [Date] FROM TableName Group By Cid, Format([Date], 'yyyy-MM-dd hh:mm:ss')