使用SQL语句汇总数据

使用SQL语句汇总数据,sql,mysql,Sql,Mysql,我有包含CMS_开始时间和CMS_停止时间的CMS表(附件) 我想通过使用日期、时间和年份作为参数(附件)来创建报告以汇总现有数据 我不知道如何创建sql语句来满足这个要求。我正在使用MySQL和MS-SQL。 有人能帮忙吗 非常感谢。这里有一个针对SQL Server的解决方案 SELECT DATEPART(hh,CMS_StartTime) AS HourOfDay, COUNT(*) AS NumMsgs, SUM(DATEDIFF(mi,CM

我有包含CMS_开始时间和CMS_停止时间的CMS表(附件)

我想通过使用日期、时间和年份作为参数(附件)来创建报告以汇总现有数据

我不知道如何创建sql语句来满足这个要求。我正在使用MySQL和MS-SQL。 有人能帮忙吗

非常感谢。

这里有一个针对SQL Server的解决方案

SELECT 
 DATEPART(hh,CMS_StartTime)  AS HourOfDay, 
 COUNT(*)              AS NumMsgs, 
 SUM(DATEDIFF(mi,CMS_StartTime,CMS_STOPTIME)) AS TotalTimeInMinutes,
 AVG(DATEDIFF(mi,CMS_StartTime,CMS_STOPTIME)) AS AvgTimeBetweenInMinutes
FROM 
      MyTable   
WHERE CMS_StartTime
      BETWEEN 'may 1 2010' AND 'may 2 2010'
GROUP BY
      DATEPART(hh,CMS_StartTime)

为了实现这一点,您需要一个数字或计数表,其中包含从零开始的整数序列列表。在我的示例中,我的数字表如下所示:

Create Table Numbers ( Value int not null primary key )
使用此功能并在SQL Server中执行此操作,您可以执行以下操作:

Select N.Value As [Hour]
    , Count(T.StartDate) As CallCount
    , Sum(DateDiff(mi, T.StartDate, T.EndDate)) As [TotalTime(mi)]
    , Avg(DateDiff(mi, T.StartDate, T.EndDate)) As [AvgTime(mi)]
From Numbers As N
    Left Join Table As T
        On DatePart(hh, T.StartDate) = N.Value
Where N.Value Between 0 And 23  
Group By N.Value
因为您没有指定,所以我假设如果一个呼叫在某个小时内开始,那么它将在该小时内计数。一个论点是,如果一个电话在给定的一小时内开始或结束,它将在一个小时内计数,这将产生重复计数,但会告诉您一天中给定的一小时内有多少电话正在进行。为此,需要更改上面的查询,以便将以下内容添加到On子句
或DatePart(hh,T.EndDate)=N.Value

我相信MySql的等价物是:

Select N.Value As [Hour]
    , Count(T.StartDate) As CallCount
    , Sum( TimestampDiff(MINUTE, T.StartDate, T.EndDate) ) As [TotalTime(mi)]
    , Avg( TimestampDiff(MINUTE, T.StartDate, T.EndDate) ) As [AvgTime(mi)]
From Numbers As N
    Left Join Table As T
        On Hour(T.StartDate) = N.Value
Where N.Value >= 0 And N.Value <= 23    
Group By N.Value
选择N.值为[小时]
,将(T.StartDate)计数为CallCount
,总和(TimestampDiff(分钟,T.StartDate,T.EndDate))为[总时间(mi)]
,Avg(TimestampDiff(分钟,T.StartDate,T.EndDate))作为[AvgTime(mi)]
从数字到N
左联接表为T
小时(T.起始日期)=N.值

其中N.Value>=0和N.Value参数我指的是日期、月份和年份(在附件“24/20/2009”中我错了,可能是“24/03/2009”)。非常感谢。你似乎错过了总时间。