首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >夏令时区特定时间的滴答数据

夏令时区特定时间的滴答数据
EN

Stack Overflow用户
提问于 2022-02-06 04:26:56
回答 1查看 108关注 0票数 0

我有一个语法,NAS,mariadb,有巨大的蜱虫数据。我想每天在16:00 US/Eastern制作一张标价的桌子。

在没有时区考虑的情况下,每天在10:05 GMT上很容易得到带有滴答声的表格:

代码语言:javascript
运行
复制
SELECT 
    TIMESTAMP,
    DATE(FROM_UNIXTIME(TIMESTAMP / 1000)) DATE,
    TIME(FROM_UNIXTIME(TIMESTAMP / 1000)) TIME,
    PRICE 
FROM DATASET.TICK
WHERE
    # 10:05:00 <= GMT < 10:07:00
    MOD(TIMESTAMP, 86400000) >= 79500000
    AND
    MOD(TIMESTAMP, 86400000) <  79620000
GROUP BY DATE;

似乎最简单的方法是使用mysql_tzinfo_to_sql,然后与CONVERT_TZ(Timestamp, 'UTC', 'US/Eastern')一起使用。但我在NAS里有命令。

代码语言:javascript
运行
复制
-sh: mysql_tzinfo_to_sql: command not found
-sh: mariadb-tzinfo-to-sql: command not found

由于US/Eastern中在17:00到18:00之间没有数据,所以我可能会想出一种愚蠢而缓慢的方法(也许不是在mysql中)。但是我想看看是否有更聪明的方法在我的设置中通过mysql来实现呢?

更新v1:

关于mysql_tzinfo_to_sql: command not found的问题。我已经用我的Ubuntu机器处理了它。

设置:

(ssh,mariadb)

  • Ubuntu机器(ssh,mysql-server-core-8.0,mysql客户端)

步骤:

  1. zoneinfo目录从NAS复制到计算机:例如

scp -r user@192.168.1.2:/usr/share/zoneinfo ~/Documents

  1. 在您的计算机中运行命令并更新mysql数据库:例如

mysql_tzinfo_to_sql zoneinfo | mysql -u root -h 192.168.1.2 -p mysql

现在,可以使用CONVERT_TZ()。由于‘US/ exist’不存在于时区表中,所以我选择了America/New_York。因此,从我以前的代码中直接转换成:

代码语言:javascript
运行
复制
SELECT
    TIMESTAMP,
    DATE(CONVERT_TZ(FROM_UNIXTIME(TIMESTAMP / 1000), 'SYSTEM', 'America/New_York')) DATE,
    TIME(CONVERT_TZ(FROM_UNIXTIME(TIMESTAMP / 1000), 'SYSTEM', 'America/New_York')) TIME,
    PRICE 
FROM DATASET.TICK
WHERE
    # 16:00:00 <= America/New_York < 16:00:05
    TIME(CONVERT_TZ(FROM_UNIXTIME(TIMESTAMP / 1000), 'SYSTEM', 'America/New_York')) BETWEEN CAST('16:00:00' AS TIME) AND CAST('16:00:05' AS TIME)
GROUP BY DATE, CODE

TIME列每天可显示16:00。虽然这部分已经解决了,但这只适用于一张小桌子,而我现在正忍受着

error 1206: The number of locks exceeds the lock table size.

我可以看到,这种转换是乏味和低效的。但是,我最好的猜测或下一步是向表中添加基于Timezone的日期和时间列。

EN

回答 1

Stack Overflow用户

发布于 2022-02-06 06:03:11

让我们同时解决第二个问题。

你想要最后一个条目,比如说,10:07:00。也许你的意思是“pm”?这样就解决了失踪的条目问题。以及人工时间范围内的多个条目。

但这带来了另一种糟糕的局面这是一个"groupwise-max“问题;请参阅我添加的标记。

或者看看我在中描述的高效算法中哪一个最适合您的情况。注意,您将需要为任何解决方案添加一个INDEX,该操作将花费大量时间。

您提到了DST,但是让我们通过简单地要求23:59:59之前每天的最后一个条目来消除这个问题。这假设你想要“市场收盘”,并且在收盘后没有交易。而且,它也不在乎那些愚蠢的日光储蓄是否有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71004200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档