【问题标题】:Abstract information for data that movies through different stages通过不同阶段拍摄的数据的抽象信息
【发布时间】:2018-03-04 04:07:27
【问题描述】:

我正在尝试为过渡到不同阶段的用户生成多个条形图。以下是我的 user_stage_mappings 表结构

+----+----------+---------+------------------+----------------+
| id | stage_id | user_id | stage_start_date | stage_end_date |
+----+----------+---------+------------------+----------------+
|  1 |        1 |       1 | 2017-12-25       | 2018-01-02     |
|  2 |        2 |       1 | 2018-01-02       | 2018-01-05     |
|  3 |        3 |       1 | 2018-02-05       |                |
+----+----------+---------+------------------+----------------+

现在我想为每个阶段绘制 3 个单独的图表,从 2018 年 1 月 1 日2018 年 1 月 7 日(日期可以是任何范围)。所以图表会如下所示。

第一阶段图表:
1st2nd 1 月显示条形图,计数为 1,因为当时的想法处于第 1 阶段,其余日子没有条形图。

第 2 阶段图表:
显示 1 月 2nd5th 的条形图,因为当时的想法是在第 2 阶段,而 1 月 1 日、6 日和 7 日没有条形图。

第 3 阶段图表:
显示 1 月 5th7th 的条形图,因为当时该想法处于第 3 阶段,请注意最后阶段没有结束日期,表明该想法是仍处于第 3 阶段。

我已将数据集减少到最低限度,实际数据集将在不同阶段有多个用户。将其编写为 mysql 查询的最佳方式是什么。

我在想可能会在 1 月 1 日到 7 日循环,每次迭代都会计算用户数量。例如,对于 1 月 1 日,获取 1 月 1 日介于 stage_start_date 和 stage_end_date 之间的用户,但不知何故,这并不是最佳选择。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    对我来说,通过循环绘制图表会更容易。我解释一下,首先获取每天的用户数:

    SELECT DATE(stage_start_date) stage_start_date, count(DISTINCT user_id) NoOfUsers
    FROM user_stage_mappings
    WHERE stage_start_date BETWEEN STR_TO_DATE('2018-01-01','%Y-%m-%d')
    AND STR_TO_DATE('2018-01-07','%Y-%m-%d')
    GROUP BY DATE(stage_start_date)
    ORDER BY DATE(stage_start_date);
    

    这些数据可以由仪表板的应用层获取,并存储在一个数组中。您现在可以通过根据索引操作数组来获取不同的阶段图表数据。 试图直接从数据库中获取完整的预期信息会很麻烦。

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多