代码之家  ›  专栏  ›  技术社区  ›  miiiii

按固定间隔范围分组

  •  1
  • miiiii  · 技术社区  · 7 年前

    我有时间以Unix格式存储 int . 我想按1天的时间间隔(即86400秒)对结果进行分组。

    样本数据

    timestamp  | state
    +++++++++++++++++++
    1540427604 | ABC
    1540770300 | PQR
    1540770050 | PQR
    1540751300 | ABC
    

    我想把 state 按每个86400的周期,即如果有人要求从1540425600(即2018年10月25日)到1540771200(即2018年10月29日),则输出应为

    range                    | state  | count
    ++++++++++++++++++++++++++++++++++++++++++
    1540425600 - 1540512000  |   ABC  | 1
    1540684800 - 1540771200  |   ABC  | 1
    1540684800 - 1540771200  |   PQR  | 2
    

    我试过这么多东西,但我觉得这一个更接近……

    select 
        concat(86400*floor(timestamp /86400), '-', 86400*floor(timestamp/86400) + 86400) as `range` , count(state)
        from MT 
        where timestamp between MINDATE AND MAXDATE
        group by `range` order by `range`;
    

    但我得到的输出并不是以通过的心态或心态的倍数开始的…但它的范围是86400。我希望范围应该总是从mmindate开始,如果存在这样的记录,或者在mmindate*86400的muliple中。

    请帮忙。

    1 回复  |  直到 7 年前
        1
  •  1
  •   fancyPants    7 年前

    这项工作是:

    select
    concat(min(floor(timestamp / 86400) * 86400), ' - ', max(floor(timestamp / 86400) * 86400) + 86400) as `range`
    , state
    , count(*)
    from t
    group by floor(timestamp / 86400), state
    order by `range`