如何从日期列中删除时间并在每个日期拥有唯一的用户数

how to strip the time from a date column and have a unique count of users per date

我遇到了一个事件 table,其中包含太多列。我想查询 3 个列,DateTimeResolved、Team 和 Individual。首先,我想放弃 DateTimeResolved 列中的时间,只留下一个日期。然后我想知道自 2017 年 4 月以来每个团队有多少人(唯一计数)解决了事件。

这可以做到吗?

我有以下查询,但它们显然需要调整,因为它们没有给我想要的最终结果。

select stat_datetimeresolved, resolvedbyteam, resolvedby 
from [dbo].[Incident]
where Stat_DateTimeResolved is not null
and Stat_DateTimeResolved >= '2017-04-01 00:00:00'
order by Stat_DateTimeResolved asc


select CAST(stat_datetimeresolved as date),
COUNT(resolvedby)
from [dbo].[Incident]
group by CAST(Stat_DateTimeResolved as DATE)
order by CAST(stat_datetimeresolved as DATE) asc

您在此处的问题中有多个不兼容的请求。我想你追求的其实是:

自 2017 年 4 月以来,每个团队每天有多少人下定决心?

为此,您只需要 return 一个包含解决日期、个人所属团队以及实际做出解决方案的人的唯一列表,然后汇总:

with r as
(
    select distinct cast(stat_datetimeresolved as date) as DateResolved
                   ,ResolvedByTeam
                   ,ResolvedBy
    from [dbo].[Incident]
    where Stat_DateTimeResolved >= '20170401'  -- NULL check is redundant if you are filtering for a value
)
select DateResolved
      ,ResolvedByTeam
      ,count(ResolvedBy) as NumIndividualsMakingResolutions
from r
group by DateResolved
        ,ResolvedByTeam
order by DateResolved
        ,ResolvedByTeam;

你很亲密;您可以将 DISTINCT 关键字添加到 COUNT 以按天获取唯一团队成员的数量。

SELECT CAST(stat_datetimeresolved as date) as DateResolved
, ResolvedByTeam
, COUNT(DISTINCT resolvedby) as ResolvedByCnt
FROM [dbo].[Incident]
 WHERE Stat_DateTimeResolved >= '20170401'
GROUP BY CAST(Stat_DateTimeResolved as DATE), ResolvedByTeam
ORDER BY CAST(stat_datetimeresolved as DATE) asc, ResolvedByTeam