【问题标题】:Need to calculate total amount of tank filled per day需要计算每天的罐装总量
【发布时间】:2019-06-26 06:27:11
【问题描述】:

我有来自不同水箱的数据正在填充。可以在最终用户认为有必要的任何时候开始填充水箱。我需要根据这些数据计算出每天装满水箱的总量。

User ID   Tank ID   tank_capacity   tank_percent_full   server_time
XXZFR170500033  01617IJT0526Z3  1000    96  2017-05-01T02:02:23.971Z
XXZFR170500033  01617IJT0526Z3  1000    95  2017-05-01T10:58:57.691Z
XXZFR170500033  01617IJT0526Z3  1000    95  2017-05-01T14:03:36.828Z
XXZFR170500052  01617IJT0528y3  1000    95  2017-05-19T18:13:04.327Z
XXZFR170500052  01617IJT0528y3  1000    94  2017-05-19T18:27:18.657Z
XXZFR170500052  01617IJT0528y3  1000    75  2017-05-20T13:53:25.142Z
XXZFR170500052  01617IJT0528y3  1000    74  2017-05-20T17:51:54.000Z
XXZFR170500039  01617IJT0528x3  1000    66  2017-05-24T12:41:16.659Z
XXZFR170500039  01617IJT0528x3  1000    69  2017-05-24T12:54:27.501Z
XXZFR170500039  01617IJT0528x3  1000    65  2017-05-24T13:12:02.007Z

答案看起来像这样

XXZFR170500033 01617IJT0526Z3 2017-05-01 1% used 10 l
XXZFR170500052 01617IJT0526y3 2017-05-01 21% used 210 l
XXZFR170500039 01617IJT0526x3 2017-05-01 4% used 40 l

请记住,油箱 01617IJT0526x3 从 66 开始但上升到 69,这意味着当时油箱已被装满,我们必须忽略这些,然后当我们看到总百分比下降时,只有我们采取差异。所以我们只需要从 69 到 65 进行计算

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    您可以使用lag()获取填充:

    select t.*
    from (select t.*, 
                 lag(tank_percent_full) over (partition by tank_id order by server_time) as prev_tank_percent_full
          from t
         ) t
    where prev_tank_percent_full < tank_percent_full;
    

    目前还不清楚您实际上想要什么结果。

    【讨论】:

    • 感谢您的回答,我想在一天开始填充之前获得每个最高罐填充和最低罐液位之间的差异总和。请参阅我的问题的下部以获得答案
    • 你的答案部分解决了问题,可以进一步做的是单独取差,并在 prev 存在的地方加 0,最后取所有内容的总和。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多