如何在 SQL 中获取时间数据类型的小计?

Posted

技术标签:

【中文标题】如何在 SQL 中获取时间数据类型的小计?【英文标题】:How to get subtotals with time datatype in SQL? 【发布时间】:2017-09-18 12:06:12 【问题描述】:

我在生成 SQL 查询时遇到问题。我在 Firebird 数据库中有一个表,如下所示:

ID  | PROCESS | STEP | TIME  
654 |       1 |    1 | 09:08:40  
655 |       1 |    2 | 09:09:32  
656 |       1 |    3 | 09:10:04  
...  
670 |       2 |   15 | 09:30:05  
671 |       2 |   16 | 09:31:00  

等等。

我需要每个流程组的小计(大约有 7 个)。该表的 TIME 列具有“时间”类型。我一直在尝试使用 DATEDIFF,但它不起作用。

【问题讨论】:

您希望查询返回每个步骤花费的时间,还是每个流程花费的时间? 按每个进程。我知道我必须使用 SUM,但无法弄清楚与其他 SQL 函数的组合 你到底想做什么? 你展示了参考源数据——这真的很好。现在请添加您要生成的参考结果数据,并逐步描述您如何从源数据生成结果数据,以便我们了解您描述的过程 【参考方案1】:

你需要使用SUM

这里已经回答了这个问题。

How to sum up time field in SQL Server

这里。

SUM total time in SQL Server

有关更具体的 Firebird 文档。在此处阅读 sum 函数。

Sum() - Firebird Official Documentation

【讨论】:

感谢您的回答。我一直在阅读这些帖子,并尝试了解决方案但没有成功。当我从这里link 尝试解决方案时,我得到一个表达式评估异常 --> '0:00:00 is not a TIME type' 在问题中发布您的查询。【参考方案2】:

我认为您应该使用“GROUP BY”来获取最大时间和最小时间,并在 datediff 函数中使用它们。类似的东西:

select process, datediff(second, max(time), min(time)) as nb_seconds
from your_table
group by process;

【讨论】:

以上是关于如何在 SQL 中获取时间数据类型的小计?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PL-SQL 在 Oracle 中获取列数据类型

如何在 Spark SQL 中获取列的数据类型?

Databricks/Spark SQL - 如何在地图类型字段中获取数据

SQL:如何获取 XML 数据类型中属性的值?

如何从 SQL Server 文件表中的二进制数据中获取文件类型?

脚本中如何做填报数据校验