创建包含最近 365 天日期的查询返回字段

Create query returning field containing dates of last 365 days

我正在使用 AWS QuickSight 构建一个仪表板,其中包含与系统使用情况相关的分析和指标。我正在尝试可视化用户随时间的注册情况。我在仪表板上创建了一个参数和控件,允许仪表板用户 select 'Last N days'(7、30、60、90、180、365 天),并且我有一个关联的折线图将绘制相关数据。

然而,问题是有些日子没有用户注册,这就留下了看似未报告的数据空白(在折线图中)。我想做的是 JOIN 我当前在 day 上的查询 returns 每行包含过去 365 天的单个字段。

Select count (DISTINCT id), date_trunc('day', created_at) as day 
FROM users
GROUP BY day
ORDER BY day desc

要获取日期而不是数字,您可以使用以下查询:

查询:

 with recursive date_range(day,daycount) as
 (
  SELECT '1 Jan 2020'::date as DAY, 1 as daycount
  UNION ALL
  SELECT day+1, daycount+1 from date_range WHERE daycount<365
 )select day from date_range

输出:

 | day        |
 | :--------- |
 | 2020-01-01 |
 | 2020-01-02 |
 | 2020-01-03 |
  .
  .
  .
  .
 | 2020-12-28 |
 | 2020-12-29 |
 | 2020-12-30 |

dbhere

您可以使用递归通用 table 表达式来生成它。然后你就可以用你的 table 加入那个 cte。请查看下面的代码。

with recursive date_range(day) as
(
 SELECT 1 as day
 UNION ALL
 SELECT day+1 
 from date_range 
 WHERE day < 365
)select DATE_TRUNC('day', NOW() - concat(day,' days')::interval ) as date from date_range

输出:

|date                  |
------------------------
|2021-06-10 00:00:00+01|
|2021-06-09 00:00:00+01|
|2021-06-08 00:00:00+01|
|2021-06-07 00:00:00+01|
|2021-06-06 00:00:00+01|
|2021-06-05 00:00:00+01|
|2021-06-04 00:00:00+01|
|2021-06-03 00:00:00+01|
|2021-06-02 00:00:00+01|
|2021-06-01 00:00:00+01|
...

dbhere