我有一个表,其中有两列开始时间和结束时间。我能够计算每一行的持续时间,但我也想获得总持续时间。这该怎么做。
谢谢
您的列的数据类型为TIMESTAMP,如下所示:
SQL> create table mytable (start_time,end_time)
2 as
3 select to_timestamp('2009-05-01 12:34:56','yyyy-mm-dd hh24:mi:ss')
4 , to_timestamp('2009-05-01 23:45:01','yyyy-mm-dd hh24:mi:ss')
5 from dual
6 union all
7 select to_timestamp('2009-05-01 23:45:01','yyyy-mm-dd hh24:mi:ss')
8 , to_timestamp('2009-05-02 01:23:45','yyyy-mm-dd hh24:mi:ss')
9 from dual
10 union all
11 select to_timestamp('2009-05-01 07:00:00','yyyy-mm-dd hh24:mi:ss')
12 , to_timestamp('2009-05-01 08:00:00','yyyy-mm-dd hh24:mi:ss')
13 from dual
14 /
Tabel is aangemaakt.
从一个时间戳减去另一个时间戳会导致一个INTERVAL数据类型:
SQL> select start_time
2 , end_time
3 , end_time - start_time time_difference
4 from mytable
5 /
START_TIME END_TIME TIME_DIFFERENCE
------------------------------ ------------------------------ ------------------------------
01-05-09 12:34:56,000000000 01-05-09 23:45:01,000000000 +000000000 11:10:05.000000000
01-05-09 23:45:01,000000000 02-05-09 01:23:45,000000000 +000000000 01:38:44.000000000
01-05-09 07:00:00,000000000 01-05-09 08:00:00,000000000 +000000000 01:00:00.000000000
3 rijen zijn geselecteerd.
并且不能对INTERVAL数据类型求和。这是一个令人讨厌的限制:
SQL> select sum(end_time - start_time)
2 from mytable
3 /
select sum(end_time - start_time)
*
FOUT in regel 1:
.ORA-00932: inconsistente gegevenstypen: NUMBER verwacht, INTERVAL DAY TO SECOND gekregen
为了规避此限制,您可以使用秒数进行转换和计算,如下所示:
SQL> select start_time
2 , end_time
3 , trunc(end_time) - trunc(start_time) days_difference
4 , to_number(to_char(end_time,'sssss')) - to_number(to_char(start_time,'sssss')) seconds_difference
5 from mytable
6 /
START_TIME END_TIME DAYS_DIFFERENCE SECONDS_DIFFERENCE
------------------------------ ------------------------------ --------------- ------------------
01-05-09 12:34:56,000000000 01-05-09 23:45:01,000000000 0 40205
01-05-09 23:45:01,000000000 02-05-09 01:23:45,000000000 1 -80476
01-05-09 07:00:00,000000000 01-05-09 08:00:00,000000000 0 3600
3 rijen zijn geselecteerd.
然后它们是可以累加的普通数字
SQL> select sum
2 ( 86400 * (trunc(end_time) - trunc(start_time))
3 + to_number(to_char(end_time,'sssss')) - to_number(to_char(start_time,'sssss'))
4 ) total_time_difference
5 from mytable
6 /
TOTAL_TIME_DIFFERENCE
---------------------
49729
1 rij is geselecteerd.
并且,如果您愿意,可以将此数字转换回INTERVAL:
SQL> select numtodsinterval
2 ( sum
3 ( 86400 * (trunc(end_time) - trunc(start_time))
4 + to_number(to_char(end_time,'sssss')) - to_number(to_char(start_time,'sssss'))
5 )
6 , 'second'
7 ) time_difference
8 from mytable
9 /
TIME_DIFFERENCE
------------------------------
+000000000 13:48:49.000000000
1 rij is geselecteerd.
问候,罗布。
问题内容: 我有一个示例表(table_name:track_task),如下所示: 当任务阶段由于应用程序代码中的某些操作而进行时,以上数据将自动填充。阶段从1到4。但是,由于某种逻辑,任务可能会跳过阶段3。但是所有任务都将在阶段4结束。可能的任务路径如下所示: 我需要查询和检索一个报告,该报告显示任务在给定时间在每个阶段需要多长时间(以天为单位)。到目前为止,我已经提出了以下查询: 得出如下结
我需要有关构建SQL查询的帮助: 这是我用来存储测试运行统计信息的postgres表。 此表包含测试开始时间、结束时间和状态。我需要计算由于测试失败而使用的时间间隔。即测试失败和下一个立即测试开始之间的时间间隔。 即对于每个测试失败的记录,获取end_date并获取同一测试的下一个即时记录的start_date。计算时间差。将所有此类失败记录的持续时间相加,并按失败次数计算。以获得平均值。 例子:
我想计算Java中两小时(HH:mm:ss)之间的时间差(持续时间)。在这里,我读了几个关于这个主题的主题,但我的问题有点不同。 我也不能使用。 示例: ode: 结果:
对于我的项目,我必须读取在CSV文件中提供给我们的数据并以某种格式将其写出。我几乎完成了,但我遇到的问题是我的程序没有完全读取给定的时间。从这里开始,我的程序只是读取所有给定的时间。 我试图将<code>字符串时间。 这应该会回来 [芝麻街|埃尔莫之最1240:28:11] 但它返回 [Elmo的最佳|芝麻街124;2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1
我被困在一个问题上,希望得到一些指导。我们希望生成一个报告,计算产品的连续日期(从用户提供的日期向后看)。数据集如下: 因此,我们想得出一份报告,该报告在2021年3月2日提供的日期如下所示: 尽管我正在努力编写查询,但我甚至不知道该怎么称呼它,因为我需要一个特定阈值上的连续值计数。我可以计算阈值以上的值,但不确定如何添加“连续数周”逻辑。
问题内容: 我正在尝试估算以下查询可能花费的时间: 问题答案: 使用SHOW PROFILES语法可以做到这一点。打开MySQL会话时,可以将变量“分析”设置为1或ON。 因此,所有发送到服务器的语句将被分析并存储在历史记录中,并在以后通过键入以下命令显示: 从MySQL手册中可以看到: 参考文献(在更新日期:2014年9月4日): - SHOW PROFILE语法 - INFORMATION_S