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

Datetime 如何从日期列中删除时间,并拥有每个日期的唯一用户计数,datetime,sql-server-2014,Datetime,Sql Server 2014,我有一个事件表,其中包含的列太多了。我想查询其中的3列,DateTimeResolved,Team和Individual。首先,我想把DateTimeResolved列中的时间去掉,留下一个日期。然后我想知道自2017年4月以来,每个团队中有多少人(唯一计数)解决了事件 这能做到吗 我有下面的查询工作,但他们显然需要调整,因为他们没有给我我想要的最终结果 select stat_datetimeresolved, resolvedbyteam, resolvedby from [dbo].[I

我有一个事件表,其中包含的列太多了。我想查询其中的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月以来,每个团队每天有多少成员做出决议? 为此,您只需返回一个唯一的列表,其中包含决议日期、个人所属的团队以及实际做出决议的人员,然后汇总:

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;

你很接近;您可以向计数中添加一个独特的关键字,以获取每天唯一团队成员的数量

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

谢谢你,斯图尔特。那正是我想要的!斯图尔特,我已经用你的剧本得到了我需要的数字。我该如何做同样的事情,但每月而不是每天查找不同的解析程序?您需要将所有日期值转换为每月的第一天(在SELECT、GROUP BY和ORDER BY子句中)。DATEADD(month,DATEDIFF(month,0,stat_datetimeresolved),0)应该这样做。看到我写的一篇博文:太棒了,谢谢。这给了我想要的结果。