【问题标题】:Druid Group by Day of Week and Hour of DayDruid 按星期几和星期几分组
【发布时间】:2022-08-10 15:32:35
【问题描述】:

我正在尝试找到如何按星期几分组,以及在 Druid 中按小时分组。我在这里依赖 Druid 文档:https://druid.apache.org/docs/latest/querying/sql.html,以下所有功能均来自此页面。

我知道Druid有一个函数TIME_SHIFT(<timestamp_expr>, <period>, <step>, [<timezone>])可以根据ISO8601标准中的时间段对时间戳进行四舍五入,然后我们可以通过四舍五入的时间戳进行分组,从而实现我们想要的按天时间段进行分组。

  1. 但是,如果我想按星期几分组,以便汇总一段时间内所有星期一、星期二、星期三、...、星期日收到的所有销售收入,该怎么办?我知道有一个TIME_EXTRACT(<timestamp_expr>, [<unit>, [<timezone>]]) 函数,我可以通过使用这个函数和= DOW(星期几)将每个时间戳转换为一个数字(1到7)然后按每个分组来实现我想要的的提取值。那是对的吗?
  2. 如果我想按小时分组怎么办?我在本手册中没有看到单位“一天中的小时”。

    先感谢您!

    编辑: 它似乎正在工作;但是,有没有办法让它打印出星期一、星期二、星期三……而不是 1-7 的数字?我想我可能可以在选择块中手动进行某种类型的转换,但我想知道是否有更好的方法?再次感谢!

  • 不会 TIME_EXTRACT(<timestamp_expr>, HOUR) 那样做吗?
  • @tinazmu 哦,这实际上是有道理的......我会尝试并报告。谢谢!
  • 它似乎正在工作;但是,有没有办法让它打印出星期一、星期二、星期三……而不是 1-7 的数字?再次感谢!

标签: sql druid


【解决方案1】:

TIME_EXTRACT(&lt;timestamp_expr&gt;, HOUR) 不会那样做吗?

对于日期名称,我相信您可以使用:

TIME_FORMAT(<timestamp_expr>, [<pattern>, [<timezone>]])

对于模式,您似乎可以使用“EEEE”(用于日期名称的全文形式)。

【讨论】:

  • 谢谢!这是有效的。但是,我想知道是否有办法让它显示星期一、星期二、星期三......而不是 1-7?我想我可能可以在选择块中手动进行某种类型的转换,但我想知道是否有更好的方法?
  • 添加了一个日期名称选项,试试吧!
【解决方案2】:

每天计算行数,最新条目优先。

SELECT
  TIME_FORMAT(__time, 'yyyy-MM-dd'),
  COUNT(*)
FROM example_datasource_name
GROUP BY TIME_FORMAT(__time, 'yyyy-MM-dd')
ORDER BY 1 DESC

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 2015-05-13
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多