电影通过不同阶段的数据的抽象信息

问题描述 投票:0回答:1

我正在尝试为过渡到不同阶段的用户生成多个条形图。以下是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日(日期可以是任何范围)。所以图表看起来如下。

第1阶段图表: 1月1日和2月显示1个计数的酒吧,因为这个时期的想法是在第1阶段,其余时间没有酒吧。

第2阶段图表: 1月2日至5日显示1个计数的酒吧,因为这个时期的想法是在第2阶段,1月1日,6日和7月没有酒吧。

第3阶段图表: 在1月5日至7日期间显示1个计数栏,因为这个时期的想法是在第3阶段,注意最后阶段没有结束日期,表明这个想法仍处于第3阶段。

我已将数据集减少到最小,实际数据集将在不同阶段具有多个用户。什么是最好的方式来写这个作为mysql查询。

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

mysql sql
1个回答
0
投票

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

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);

此数据可以由仪表板的应用程序层获取,并存储在数组中。现在,您可以通过根据索引操作数组来获取不同的阶段图表数据。试图直接从数据库获取完整的预期信息将是一个痛苦的屁股。

© www.soinside.com 2019 - 2024. All rights reserved.