【问题标题】:PrestoDB: select all dates between two datesPrestoDB:选择两个日期之间的所有日期
【发布时间】:2018-12-26 07:35:48
【问题描述】:

我需要形成一份报告,提供日期间隔内每个日期的一些信息。

我需要在单个查询中使用它(不能创建任何函数或支持表)。

如何在 PrestoDB 中实现这一点?

注意:有很多供应商特定的解决方案herehere 甚至here。但是它们都不能满足我的需要,因为它们要么不能在 Presto 中工作,要么不能使用表/函数。

更准确地说,这里是一个查询示例:

WITH ( query to select all dates between 2017.01.01 and 2018.01.01 ) AS dates
SELECT 
  date     date, 
  count(*) number_of_orders
FROM dates dates
LEFT JOIN order order
  ON order.created_at = dates.date

【问题讨论】:

  • 您能否提供一些示例 SQL 来说明您正在尝试做什么?
  • @IkeWalker 添加了一个示例

标签: sql presto


【解决方案1】:

您可以使用 Presto SEQUENCE() 函数将天序列生成为数组,然后使用 UNNEST 将该数组分解为结果集。

这样的东西应该适合你:

SELECT date_array AS DAY
FROM UNNEST(
      SEQUENCE(
        cast('2017-01-01' AS date), 
        cast('2018-01-01' AS date), 
        INTERVAL '1' DAY
      ) 
    ) AS t1(date_array)

【讨论】:

  • 真的很有帮助!
  • CROSS JOIN 的目的是什么?这里真的有加入吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2015-07-08
  • 1970-01-01
  • 2013-08-09
  • 2020-05-01
相关资源
最近更新 更多