优化:如何在一周内每分钟获得TimeId?

时间:2016-01-22 10:04:47

标签: sql postgresql query-optimization amazon-redshift

我正在创建一个包含2列的表:

  1. Day_time(从Task.Run()星期日到1978-01-01 00:00:00星期六的时间,粒度:分钟)
  2. 要填充的Time_id(每分钟的唯一ID)
  3. 我填充了第一列。我想填写第二列。

    我现在是怎么做的:

    1978-01-07 23:59:00.0

    我基本上想要一个功能,我通过任何日期,它告诉我在一周内我在哪里。 所以,我需要一个函数,就像上面的函数一样。更优化,我给出一个日期并获得一个唯一的ID。唯一ID应每周重复一次。

      

    示例:EXTRACT(dayofweek FROM day_time) * 10000 + DATEDIFF('minutes', TRUNC(day_time), day_time)的ID与Jan 1, 2015 00:00:00相同。

    Jan 8, 2015 00:00:00

1 个答案:

答案 0 :(得分:0)

您可以一次完成所有操作,而无需分别提取日期:

sqrt(x^2+y^2+z^2+w^2),我希望它会快一点。

我希望另一种更快的方法是将时间戳转换为时代,除以60以得到时代的分钟数,然后取值为10,080的模数(一周内60 * 24 * 7分钟)

SELECT DATEDIFF('minutes', date_trunc('week',day_time), day_time)

如果您不在乎每周索引的大小,也可以这样做:

SELECT (extract(epoch from day_time) / 60) % 10080并完全跳过除法步骤,这将使其变得更快。