【发布时间】:2020-07-03 15:28:09
【问题描述】:
我在 SQL 服务器中有一个表,其中的数据如下图所示。所以我需要计算列值大于或等于 3 的日期与下一列值 0 之间的时间差。所以在下面的示例中,“9:51”,值为 3,在“9: 54"。所以这里的总时差是3分钟。再次下一个时段是从“9:57”到“10:02”,所以这里的时间差是5分钟。下一个插槽来自“10:03”,但没有对应的行具有 0 值。所以这里的时差是 4 分钟(从“10:03”到“10:06”)。所以总时差是(3+5+4),12分钟。任何形式的帮助将不胜感激。提前致谢。
DateTime Value
3/10/2020 9:50 1
3/10/2020 9:51 3
3/10/2020 9:52 1
3/10/2020 9:53 2
3/10/2020 9:54 0
3/10/2020 9:55 0
3/10/2020 9:56 1
3/10/2020 9:57 3
3/10/2020 9:58 2
3/10/2020 9:59 3
3/10/2020 10:00 2
3/10/2020 10:01 2
3/10/2020 10:02 0
3/10/2020 10:03 3
3/10/2020 10:04 1
3/10/2020 10:05 1
3/10/2020 10:06 1
编辑 2:我也有一个雪花数据库,并使用我在上表中生成的以下查询。
with aggregatedData as
(
select count ( EVENT_ID) as total , time_slice(to_timestamp_ntz(EVENT_CREATED_AT), 1, 'MINUTE') as minutePeriod
from events
group by minutePeriod
union
SELECT
0 as total,
DATEADD(MINUTE, SEQ4(), time_slice(to_timestamp_ntz(select min(EVENT_CREATED_AT) from events), 1, 'MINUTE')) AS minutePeriod
FROM TABLE(GENERATOR(ROWCOUNT=>20000))
WHERE minutePeriod <= time_slice(to_timestamp_ntz(select max(EVENT_CREATED_AT) from events), 1, 'MINUTE')
)
select minutePeriod
,sum(total) over (partition by null order by minutePeriod rows between 9 preceding and current row) totalValue
from aggregatedData
order by minutePeriod;
【问题讨论】:
-
您可以将测试数据作为文本发布吗?谢谢。
-
并发布您的最佳尝试。以及您的预期结果。
-
@DaleK 我已经使用多个 SQL 查询生成了这个表,但我只是卡在了计算的最后阶段。为了避免混淆,我没有添加这些细节。这里
-
我们不需要所有的查询,只要足以证明问题,称为minimal reproducible example
-
如何将“9:51”和“9:54”之间的时间差设为4分钟?
标签: sql sql-server datetime