我正在创建一个包含 2 列的表:
- 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('分钟', 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
并完全跳过除法步骤,这应该会使其更快。
关于sql - 优化 : How to get TimeId from time for each minute in a week?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34943937/