优化:如何从时间中获取一周中每一分钟的TimeId?
Optimization: How to get TimeId from time for each minute in a week?
我正在创建一个有 2 列的 table:
- Day_time(时间从
1978-01-01 00:00:00
周日到 1978-01-07 23:59:00.0
周六,粒度:分钟)
- Time_id(每分钟一个唯一的id),待填充
我填充了第一列。我想填充第二列。
我现在是怎么做的:
EXTRACT(dayofweek FROM day_time) * 10000 + DATEDIFF('minutes', TRUNC(day_time), day_time)
我基本上想要一个函数,我可以在其中传递任何日期,它会告诉我一周内我在哪里。 所以,我需要一个函数,就像上面的函数一样。只是更优化,我在其中提供日期并获得唯一 ID。唯一 ID 应每周重复一次。
Example: ID for Jan 1, 2015 00:00:00
will be same as Jan 8, 2015 00:00:00
.
Why 1978-01-01? cuz it starts from a Sunday.
Why 10,000? cuz the number of minutes in a day are in four digits.
您可以一举完成,无需单独提取日期:
SELECT DATEDIFF('minutes', date_trunc('week',day_time), day_time)
我希望它会稍微快一些。
另一种我希望明显更快的方法是将时间戳转换为纪元,除以 60 以从纪元得到分钟,然后取值模数 10,080(60 * 24 * 7 分钟周)。
SELECT (extract(epoch from day_time) / 60) % 10080
如果你不关心每周索引的大小,你也可以这样做:
SELECT (extract(epoch from day_time)) % 604800
并完全跳过除法步骤,这样应该会更快。
我正在创建一个有 2 列的 table:
- Day_time(时间从
1978-01-01 00:00:00
周日到1978-01-07 23:59:00.0
周六,粒度:分钟) - Time_id(每分钟一个唯一的id),待填充
我填充了第一列。我想填充第二列。
我现在是怎么做的:
EXTRACT(dayofweek FROM day_time) * 10000 + DATEDIFF('minutes', TRUNC(day_time), day_time)
我基本上想要一个函数,我可以在其中传递任何日期,它会告诉我一周内我在哪里。 所以,我需要一个函数,就像上面的函数一样。只是更优化,我在其中提供日期并获得唯一 ID。唯一 ID 应每周重复一次。
Example: ID for
Jan 1, 2015 00:00:00
will be same asJan 8, 2015 00:00:00
.
Why 1978-01-01? cuz it starts from a Sunday.
Why 10,000? cuz the number of minutes in a day are in four digits.
您可以一举完成,无需单独提取日期:
SELECT DATEDIFF('minutes', date_trunc('week',day_time), day_time)
我希望它会稍微快一些。
另一种我希望明显更快的方法是将时间戳转换为纪元,除以 60 以从纪元得到分钟,然后取值模数 10,080(60 * 24 * 7 分钟周)。
SELECT (extract(epoch from day_time) / 60) % 10080
如果你不关心每周索引的大小,你也可以这样做:
SELECT (extract(epoch from day_time)) % 604800
并完全跳过除法步骤,这样应该会更快。