给定这样一个表:
cust_id time
123 2015-01-01 12:15:05
123 2015-01-01 12:17:06
123 2015-01-02 13:15:08
123 2015-01-02 15:15:10
456 2015-01-01 10:15:05
456 2015-01-01 12:15:07
456 2015-01-01 14:11:10
我想通过计算每个先前记录(思维lag
函数)之间的时间差cust_id
。我想要的输出:
cust_id time diff_hours diff_seconds
123 2015-01-01 12:15:05 NULL NULL
123 2015-01-01 12:17:06 0.00 121
123 2015-01-02 13:15:08 1.04 89882
123 2015-01-02 15:15:10 0.08 7202
456 2015-01-01 10:15:05 NULL NULL
456 2015-01-01 12:15:07 0.08 7202
456 2015-01-01 14:11:10 0.08 6963
如何在Teradata中完成此操作?
我已经尝试过类似的东西:
SELECT
*
, (time - time) OVER (PARTITION BY cust_id ORDER BY time ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
FROM
table_01
但是,尽管NULL
s出现在预期的位置,但我会继续收到0.0
其他所有结果。我一直在使用的包装也试着(time - time)
与SUM
我已经尝试使用EXTRACT(SECOND FROM TIME)
和其他几个变种-例如,试图地方DAY(4) to SECOND
,但我似乎无法得到语法/排序/转换完全正确的,特别是折腾了窗函数到时混合。
LAG
Teradata中没有,但是您可以重写它:
SELECT
t.*
, (time)
- min(time)
OVER (PARTITION BY cust_id
ORDER BY time
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) SECOND(4)
FROM
table_01 as t
当您尝试获取秒数时,您会遇到“间隔溢出”错误,即超过9999秒。更改DAY(4) TO SECOND
或使用我几年前编写的此SQL
UDF来计算以秒为单位的两个时间戳之差:
REPLACE FUNCTION TimeStamp_Diff_Seconds
(
ts1 TIMESTAMP(6)
,ts2 TIMESTAMP(6)
)
RETURNS DECIMAL(18,6)
LANGUAGE SQL
CONTAINS SQL
RETURNS NULL ON NULL INPUT
DETERMINISTIC
SQL SECURITY DEFINER
COLLATION INVOKER
INLINE TYPE 1
RETURN
(CAST((CAST(ts2 AS DATE)- CAST(ts1 AS DATE)) AS DECIMAL(18,6)) * 60*60*24)
+ ((EXTRACT( HOUR FROM ts2) - EXTRACT( HOUR FROM ts1)) * 60*60)
+ ((EXTRACT(MINUTE FROM ts2) - EXTRACT(MINUTE FROM ts1)) * 60)
+ (EXTRACT(SECOND FROM ts2) - EXTRACT(SECOND FROM ts1))
;
问题内容: 我通过传递ipAddress来对方法进行调用,它会返回ipAddress的位置,例如国家/地区,城市等。因此,我试图查看每个调用花费的时间。因此,我在调用方法之前设置了start_time,在调用之后设置了end_time。 所以有时候我得到的差为0 。并且resp包含有效的响应。 因此,这意味着有时需要0毫秒才能恢复响应。任何建议将不胜感激。 问题答案: 试试这个
我想得到的是: 是否可以强制excel将“30378”视为秒数而不是天数?我知道我可以把'00:00:30378'写进一个牢房--这是唯一的办法吗?
我有一个函数,受hms的启发,但我希望将其扩展到包括处理和显示天数。 我已经开始编辑脚本,但很快意识到我在处理逻辑方面超出了我的深度,几个小时跑到几天,反之亦然...... 以下是我到目前为止所拥有的: 秒:“那花了4天1小时1分1秒才运行。” < code>127932秒:“运行时间为1天11小时32分12秒。” < code>86400秒:“花了1天时间运行。” 秒:“这花了4天97小时1分1
问题内容: 有什么办法可以使它成为7.631000吗?我可以使用时间模块,但是我还需要将t1和t2变量用作DateTime对象。因此,如果有一种简便的方法可以用datettime进行操作,那就太好了。否则会看起来很丑: 问题答案:
问题内容: 大家好, 在我的项目中,我需要计算 两个日期之间以秒为单位 的 时差 : 例如 : 然后我应该得到 86400秒, 即24小时。 类似地 它应该返回 60秒 。 我读了很多问题,其中 2分钟字段*之间的区别是 11:50:01和12:10:57 *** 问题答案: $timeFirst = strtotime(‘2011-05-12 18:20:20’); $timeSecond =
问题内容: 这就是我目前所拥有的 我觉得是对的。数小时和数天应该是- 然后- 但是我的时间和日子是不正确的 问题答案: 一种简单的计算时间的方法是使用类似 如果您的天数超过28天,则可以使用此功能,但是如果您的时间为负数,则无法使用。