SQL-将日期移动到48小时窗口内
我有很多历史性的时间戳日期。基本上,我需要模拟一个新的日期,使历史日期移动到当前日期的48小时窗口内 这是日期列的摘录:SQL-将日期移动到48小时窗口内,sql,google-bigquery,Sql,Google Bigquery,我有很多历史性的时间戳日期。基本上,我需要模拟一个新的日期,使历史日期移动到当前日期的48小时窗口内 这是日期列的摘录: 2019-05-07 17:46:57.733 UTC 2019-05-15 13:03:25.247 UTC 2019-05-07 13:27:49.453 UTC 2019-05-11 04:24:02.293 UTC 2019-04-18 08:00:54.660 UTC 2019-04-25 05:34:36.777 UTC 2019-05-14 16:48:0
2019-05-07 17:46:57.733 UTC
2019-05-15 13:03:25.247 UTC
2019-05-07 13:27:49.453 UTC
2019-05-11 04:24:02.293 UTC
2019-04-18 08:00:54.660 UTC
2019-04-25 05:34:36.777 UTC
2019-05-14 16:48:07.863 UTC
假设当前日期为2019-10-03 15:00:00。预计日期范围应介于2019-10-03 15:00:00
和2019-10-01 15:00:00
预期结果如下
2019-10-02 17:46:57.733 UTC
2019-10-03 13:03:25.247 UTC
2019-10-03 13:27:49.453 UTC
2019-10-03 04:24:02.293 UTC
2019-10-02 08:00:54.660 UTC
2019-10-02 05:34:36.777 UTC
2019-10-01 16:48:07.863 UTC
为什么不构建两天的随机时间戳呢
select timestamp_add(current_timestamp, interval cast(rand() * (60 * 60 * 24 * 2) as int64) second)
from t
感觉就像是在寻找一个随机日期函数
CREATE TEMP FUNCTION random_date()
RETURNS DATE
AS ( DATE_SUB(CURRENT_DATE(), INTERVAL CAST(FLOOR(RAND() * 29 / 10) AS INT64) DAY));
with data as (
select "2019-05-07 17:46:57.733 UTC" as date_time UNION ALL
select "2019-05-15 13:03:25.247 UTC" UNION ALL
select "2019-05-07 13:27:49.453 UTC" UNION ALL
select "2019-05-11 04:24:02.293 UTC" UNION ALL
select "2019-04-18 08:00:54.660 UTC" UNION ALL
select "2019-04-25 05:34:36.777 UTC" UNION ALL
select "2019-05-14 16:48:07.863 UTC" )
SELECT
CONCAT(FORMAT_DATE("%Y-%m-%d", random_date()), " ", SUBSTR(date_time, 12))
FROM data;
输出:
+-----------------------------+
| f0_ |
+-----------------------------+
| 2019-10-01 17:46:57.733 UTC |
| 2019-10-01 13:03:25.247 UTC |
| 2019-10-02 13:27:49.453 UTC |
| 2019-10-03 04:24:02.293 UTC |
| 2019-10-03 08:00:54.660 UTC |
| 2019-10-03 05:34:36.777 UTC |
| 2019-10-02 16:48:07.863 UTC |
+-----------------------------+
为了满足我的好奇心…这种转换的实际用途是什么???