优化:如何从时间中获取一周中每一分钟的TimeId?

Optimization: How to get TimeId from time for each minute in a week?

我正在创建一个有 2 列的 table:

  1. Day_time(时间从 1978-01-01 00:00:00 周日到 1978-01-07 23:59:00.0 周六,粒度:分钟)
  2. 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 并完全跳过除法步骤,这样应该会更快。