1

我希望有人能回答这个关于我想写的 SQL 查询的问题,它可能相当基本,但它让我发疯。

我有一个表,其中包含每 15 分钟为登录到电话系统的某些代理写入的数据。这是一些字段设置的示例,还有更多,但我保持简单快速输入

FieldName          Size  Type
BeginTimePeriodDt  93    datetime
User_Id            12    varchar
EndTimePeriodDt    93    datetime
TotalLoginTime      4    int

以及数据的样本。还有更多的代理,但我再次保持简单。

BeginTimePeriodDT    User_ID EndTimePeriodDt      TotalLoginTime
2012-09-10 13:30:00  XXXXXX  2012-09-10 13:45:00  35
2012-09-10 13:30:00  YYYYYY  2012-09-10 13:45:00  900
2012-09-10 13:45:00  XXXXXX  2012-09-10 14:00:00  900
2012-09-10 13:45:00  YYYYYY  2012-09-10 14:00:00  600
2012-09-10 14:00:00  XXXXXX  2012-09-10 14:15:00  250
2012-09-10 14:00:00  YYYYYY  2012-09-10 14:15:00  95
2012-09-11 13:30:00  XXXXXX  2012-09-11 13:45:00  35
2012-09-11 13:30:00  YYYYYY  2012-09-11 13:45:00  900
2012-09-11 13:45:00  XXXXXX  2012-09-11 14:00:00  900
2012-09-11 13:45:00  YYYYYY  2012-09-11 14:00:00  600
2012-09-11 14:00:00  XXXXXX  2012-09-11 14:15:00  250
2012-09-11 14:00:00  YYYYYY  2012-09-11 14:15:00  95

正如您所看到的,每个登录的代理都会每 15 分钟写入一次记录。我正在尝试做的是获取这些记录并添加登录时间。现在,如果该表仅包含每个代理 1 天的记录,那么这将是一件非常容易的事情,但是......

该表包含每个代理多天 15 分钟间隔的记录:-(

我遇到的麻烦是弄清楚如何每天分组和添加代理间隔并返回每日总数。

所以我想最终得到类似的东西

2012-09-10 XXXXXX 1185
2012-09-11 XXXXXX 1185
2012-09-10 YYYYYY 2000
2012-09-11 YYYYYY 1300

(我知道我的数学不能加到上面的数据中,我无法计算出总和:-P)

如果有人能为我提供答案,我将不胜感激。

4

2 回答 2

1
SELECT YEAR(BeginTimePeriodDT), 
       MONTH(BeginTimePeriodDT), 
       DAY(BeginTimePeriodDT), 
       User_ID, 
       SUM(TotalLoginTime)
FROM MyTable
GROUP BY YEAR(BeginTimePeriodDT), 
         MONTH(BeginTimePeriodDT), 
         DAY(BeginTimePeriodDT), 
         User_ID
于 2012-09-19T18:50:49.847 回答
1

这应该做

SELECT dateadd(dd,0, datediff(dd,0, beginTimePeriodDt)), UserId, SUM(TotalLoginTime)
FROM test 
group by dateadd(dd,0, datediff(dd,0, beginTimePeriodDt)), userId
order by 1, 2
于 2012-09-19T18:59:05.367 回答