按 Unix 时间戳中的时隙分组

Posted

技术标签:

【中文标题】按 Unix 时间戳中的时隙分组【英文标题】:Group by time slots from Unix timestamp 【发布时间】:2015-12-24 03:04:12 【问题描述】:

我将日期/时间保存为 Unix 时间戳(13 位)。我要做的是按时间段/范围对行进行分组。例如,如下所示,

    total_order |  time_slot
    24             10 AM - 2 PM
    36             2 PM - 6PM
    30             6 PM- 10PM
    42             10PM - 2AM
    28             2AM - 6AM
    8              6AM - 10AM

我真的对如何处理这个问题一无所知?有什么建议?谢谢。

【问题讨论】:

timestamp % 86400 是从午夜开始以秒为单位的一天中的时间(在 GMT 时区)... @henry 如何按范围分组? 您可以使用每个存储桶一个元素的数组。循环遍历记录,确定桶并增加相应的数组元素。 【参考方案1】:

使用strftime() 从时间戳中提取小时数。 要获得四小时范围的数字,请除以四。 (需要偏移量,因为范围未与一天的开始对齐。)

SELECT ...
FROM ...
GROUP BY strftime('%H', timestamp, 'unixepoch', '+2 hours') / 4

【讨论】:

有没有办法在查询本身中考虑时区? 所以对于 GMT + 5.30,它将是 'unixepoch', '+5.30 hours') / 4 ? 否; +2 用于从凌晨 2 点开始的时段。您必须结合两个偏移量。 谢谢。因此,如果我理解正确,对于从早上 6 点和 GMT+5.30 时区开始的时段,偏移量应为“+11.30 小时”

以上是关于按 Unix 时间戳中的时隙分组的主要内容,如果未能解决你的问题,请参考以下文章

我需要从结构为 yyyyMMddHHmmss 20170227141500 的时间戳中按年和月分组

无法从 BigQuery 中的时间戳中提取日期

按 Unix 时间戳字段的月份分组

从 SQL 中的时间戳中提取时间

从时间戳中提取时间?

时间戳中的 T 和 Z 到底是啥意思?