Sql server SQL逻辑,用于对表进行排序,计算特定日期范围的总和和重复行

Sql server SQL逻辑,用于对表进行排序,计算特定日期范围的总和和重复行,sql-server,Sql Server,假设我有一张这样的桌子 Date Id Duration 13-1-2014 102 0:00:03 13-1-2014 102 0:08:44 14-1-2014 102 0:01:21 14-1-2014 102 0:23:40 15-1-2014 102 0:00:29 15-1-2014 102 0:14:00 13-1-2014 103 0:00:02 15-1-2014 103 0:00:56 15-1-2014 103 1:00:

假设我有一张这样的桌子

Date        Id  Duration
13-1-2014   102 0:00:03
13-1-2014   102 0:08:44
14-1-2014   102 0:01:21
14-1-2014   102 0:23:40
15-1-2014   102 0:00:29
15-1-2014   102 0:14:00
13-1-2014   103 0:00:02
15-1-2014   103 0:00:56
15-1-2014   103 1:00:28
16-1-2014   103 0:00:02
13-1-2014   104 0:01:18
13-1-2014   104 0:03:36
14-1-2014   104 0:01:02
14-1-2014   104 0:06:41
15-1-2014   104 0:00:56
15-1-2014   104 0:00:59
我希望这样

Date            Id      Duration      No.of.Id
13-1-2014       102     0:08:47       2
14-1-2014       102     0:24:02       2
i、 e对于一个日期,我希望将特定id的总持续时间和该id在该特定日期的重复行数作为一个单独的列。是否可以在select查询中实现这一点?非常感谢任何帮助/指导。提前谢谢

这样行吗

SELECT  date, 
    id, 
    SEC_TO_TIME(SUM(TIME_TO_SEC(STR_TO_DATE(Duration, '%h:%i:%s')))) as Duration, 
    count(*)
FROM table_like_this
WHERE id = %your_id%
GROUP BY date;

也许是一种更简单的方法,但是

SELECT [Date],  [Id], 
CONVERT(VARCHAR(8), DATEADD(ms, SUM(DATEDIFF(ms, 0, CAST([Duration] as time))), 0), 108)   as duration,
COUNT(*) as nb
FROM Table1
GROUP BY [Date], [Id]

请参见持续时间列的数据类型。比间歇时间还长吗?一切都是nvarchar。这实际上是来自excel的数据,通过cfor 102/14-1-2012输入到sql中,应该是00:25:01,没有输入错误。但是你答对了我的问题谢谢你的否决,请详细说明!您选择id,然后按日期分组。哦,忘记了在哪里,修复了您可以为您的表提供创建吗?这是通过c从excel单张传送到sql的数据。所有数据类型都是nvarchar。@如果它们具有不同的ID,则不使用kcube。。。我的意思是每个日期/Id元组有一行,这不是你想要的吗?我所有的变量都是nvarchar。当我尝试您的代码时,它给出了这样的结果。很抱歉,从字符串转换日期和/或时间时,此错误转换失败。您的代码在@Raphael处工作得非常好。我的数据类型有问题。如何将此标记为答案?再次感谢你@你在我的回答中看到sqlfiddle了吗?你能看出这些数据和你的有什么不同吗?也许你所有的持续时间字段都不是那样格式化的?