sql - 优化 : How to get TimeId from time for each minute in a week?

标签 sql postgresql query-optimization amazon-redshift

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

  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('分钟', 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 并完全跳过除法步骤,这应该会使其更快。

关于sql - 优化 : How to get TimeId from time for each minute in a week?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34943937/

相关文章:

php - 如何在 MySQL 中设置年份数据类型

sql - Bigquery 滚动月份数据

java - 如何弄清楚 .class 文件的作用?

sql - 一次从大表中获取的最佳行大小

Mysql结构及很多表之间的关系

java - 未在 Liquibase 的 Postgres 环境中创建数据库更改日志表

performance - postgres 截断很慢

mysql - 缓慢的 MySQL 查询——JOIN 中的 CASE

mysql - 适当的索引(或删除)以优化大型数据集表

sql - 多层相关子查询