Sql 有没有一种方法可以将时间戳按24小时滚动分组,这样我就可以在Snowflake中检索一个总数?

Sql 有没有一种方法可以将时间戳按24小时滚动分组,这样我就可以在Snowflake中检索一个总数?,sql,snowflake-cloud-data-platform,ansi-sql,Sql,Snowflake Cloud Data Platform,Ansi Sql,例如,我有 race_start_time race_end_time total_money_raised 2020-05-17 8:50:24 2020-05-17 12:12:43 100 2020-05-22 17:29:19 2020-05-22 19:44:46 98 2020-05-06 17:22:51 2020-05-06 19:11:41 84 2020-05-06 19:25:15 2020-05-06 20:35:53 68 2020-05-06 15

例如,我有

race_start_time     race_end_time      total_money_raised
2020-05-17 8:50:24  2020-05-17 12:12:43 100
2020-05-22 17:29:19 2020-05-22 19:44:46 98
2020-05-06 17:22:51 2020-05-06 19:11:41 84
2020-05-06 19:25:15 2020-05-06 20:35:53 68
2020-05-06 15:04:52 2020-05-06 17:05:13 90
2021-01-11 13:32:45 2021-01-11 15:57:46 104
2020-05-26 13:19:05 2020-05-26 16:05:12 105
2020-12-05 7:08:31  2020-12-05 10:22:00 77
这些数据都是针对同一个ID的-我想看看他们从比赛开始的24小时内筹集了多少资金**,比如从2020-05-17 8:50:24到2020-05-18 8:50:24,从2020-05-22 17:29:19到2020-05-23 17:29:19等等

期望输出

dates_here total_sum_raise
group24h   55
group24h   242
group24h   89

我希望窗框能在这样的值或日期范围内工作,但事实并非如此。因此,您可能需要在表上的日期范围内进行自联接。大致如下(忽略CTE,显然,这正是我创建示例数据的方式):


请解释“团体24小时”的含义。滚动求和通常不会改变行数,因此不太清楚您要的是什么。如何计算“55”?这似乎和样本数据无关。嗯,我不是说滚动总和——更像是滚动小时。我想看看他们能否在24小时内达到一定的金额。“所需输出”中的55是一个随机数-显示所需设置。应该解释一下!谢谢你澄清问题。这太美了!!!!谢谢你帮我提供了所有有限的信息。这正是我需要的。
WITH x AS (
SELECT *
FROM (VALUES 
      ('2020-05-17 8:50:24'::timestamp,'2020-05-17 12:12:43'::timestamp, 100),
      ('2020-05-22 17:29:19'::timestamp,'2020-05-22 19:44:46'::timestamp,  98),
      ('2020-05-06 17:22:51'::timestamp,'2020-05-06 19:11:41'::timestamp,  84),
      ('2020-05-06 19:25:15'::timestamp,'2020-05-06 20:35:53'::timestamp,  68),
      ('2020-05-06 15:04:52'::timestamp,'2020-05-06 17:05:13'::timestamp,  90),
      ('2021-01-11 13:32:45'::timestamp,'2021-01-11 15:57:46'::timestamp,  104),
      ('2020-05-26 13:19:05'::timestamp,'2020-05-26 16:05:12'::timestamp,  105),
      ('2020-12-05 7:08:31'::timestamp,'2020-12-05 10:22:00'::timestamp, 77)
    ) x (race_start_time, race_end_time, total_money_raised)
)

SELECT a.race_start_time, a.race_end_time, a.total_money_raised, SUM(b.total_money_raised)
FROM x a
JOIN x b
  ON b.race_start_time BETWEEN a.race_start_time AND dateadd(day,1,a.race_start_time)
GROUP BY 1,2,3
ORDER BY 1;