【问题标题】:Having trouble joining information from two tables using timestamps使用时间戳连接来自两个表的信息时遇到问题
【发布时间】:2021-05-01 01:43:44
【问题描述】:

我在 BigQuery 中有两个表:

  • A - 具有进程的确切开始和结束时间
  • B - 它具有流程消耗的几种产品的每小时成本

我需要使用表 B 中的数据来计算每个过程(表 A)的成本估计值。我想通过将包含在该时间段内的所有产品(表 B)的成本相加来实现表A中的过程。

所以,这里有两个表的一些假数据和所需的输出:

流程元数据(表 A)

process_name timestamp_init timestamp_end
a 2021-04-01 11:15:44.888153 UTC 2021-04-01 12:25:44.888153 UTC
b 2021-04-01 13:50:17.033498 UTC 2021-04-01 14:50:17.033498 UTC
c 2008-04-02 20:19:36.983747 UTC 2008-04-02 20:58:20.983747 UTC
d 2010-04-02 22:06:10.348753 UTC 2010-04-02 23:08:28.348753 UTC

平台成本(表 B)

product usage_start_time usage_end_time cost
ax 2021-04-01 11:00:00 UTC 2021-04-01 12:00:00 UTC 10
b4 2021-04-01 11:00:00 UTC 2021-04-01 12:00:00 UTC 9
cf 2021-04-01 11:00:00 UTC 2021-04-01 12:00:00 UTC 25
jw 2021-04-01 14:00:00 UTC 2021-04-01 15:00:00 UTC 125
ki 2021-04-01 20:00:00 UTC 2021-04-01 21:00:00 UTC 180
fr 2021-04-01 22:00:00 UTC 2021-04-01 23:00:00 UTC 250

期望的结果

process_name total_cost
a 44
b 125
c 180
d 250

我开发了以下代码:

SELECT  a.process_name,
        SUM(b.cost) as total_cost

FROM    A a,
        B b

WHERE   b.usage_start_time >= timestamp_trunc(timestamp_add(a.timestamp_init, interval 30 minute), hour)
AND     b.usage_end_time <= timestamp_trunc(timestamp_add(a.timestamp_end, interval 30 minute), hour)

GROUP BY a.process_name

请注意,我正在四舍五入表 A 中的时间戳,因此它与表 B 的格式相匹配。

但由于某种我不知道的原因,它没有返回任何结果。我做错了什么?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    我不确定 30 分钟是从哪里来的。重叠的逻辑是:

    SELECT  a.process_name,
            SUM(b.cost) as total_cost
    FROM A a JOIN
         B b
         ON b.usage_start_time < a.timestamp_end AND
            b.ussage_end_time >= a.timestamp_init
    GROUP BY a.process_name
    

    【讨论】:

    • 感谢您的回答,这将非常有用。 30 分钟逻辑旨在正确舍入日期。 “timestamp_trunc”的作用与地板类似,所以要在 14:58 到 15:00(而不是 14:00)之间循环,我需要添加 30 分钟。
    • @DunkelLocust 。 . .如果您只需要检测重叠,我有点不清楚为什么需要舍入。
    猜你喜欢
    • 2019-07-14
    • 2013-12-02
    • 1970-01-01
    • 2020-01-31
    • 2017-08-31
    • 2011-07-13
    • 2022-11-09
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多