0

我有一个像这样的表: 我的数据库 现在我正在尝试获取所有调用的列以及特定calledvar 的持续时间的总和。现在我正在尝试这个:

select called,SUM(duration) as dursum,time,CONVERT(VARCHAR(8), time, 4) AS Batch  
from Calls
where caller='somevalue'
group by called,time
order by called

现在的问题是,我猜是因为我time也是按顺序排序的,所以我并没有真正通过调用得到不同的值,我多次得到相同的数字,当然总和的作用相同,只对部分行求和。

我无法删除,group by time因为它会导致使用该SUM功能时出错。

再次,我希望结果让每个被叫号码每天一次,并且 dursum 包含所有持续时间总和以某种方式按批处理列分组......

我该如何解决这个问题?

4

2 回答 2

1

你是对的,不按时间分组会给你带来正确的结果集。但是,随后发生的错误很容易解释:它是由在 select 子句中选择“ time,CONVERT(VARCHAR(8), time, 4) AS Batch ”引起的 -> 因此您只需要某种聚合时间字段(例如 MAX(time),CONVERT(VARCHAR(8), MAX(time), 4) AS Batch。

此致

于 2012-11-25T11:47:29.843 回答
0

好吧,这就是我最终解决的方法:

select called,SUM(duration) as dursum, dateadd(DAY,0, datediff(day,0, time))as Batch2 ,CONVERT(VARCHAR(8), time, 4) AS Batch  
from Calls
where caller='0502081971'
group by called, dateadd(DAY,0, datediff(day,0, time)),CONVERT(VARCHAR(8), time, 4)
order by called
于 2012-11-25T11:56:04.607 回答