如何汇总sql中有空格的历史数据?

iq3niunx  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(353)

我有一些来自不同来源的历史数据,我想编译成一个折线图。
下面是我正在使用的一个示例sql fiddlehttps://www.db-fiddle.com/f/opregt1gez55ty5xumu6jz/1
但是,我需要处理各种情况。在下面的场景中,我总是有3个源(a,b,c)。b和c总是带来价值,但a是遇到问题的运行。
用户要求提供1月1日至1月5日的数据。
消息人士a无法带来1月3日的数据。我的折线图应该显示1月1日、2日、4日和5日的值。它跳过3,因为不存在源a的值。
由于缺少连接,源a在1月3日之后没有提供任何更新。我的折线图应该显示1月1日和2日的值。没有3、4或5,因为我们缺少来自源a的值。
1月3日后,a源关闭。我的折线图应该显示从1月1日到5日的所有值。即使源a关闭,我们仍然希望看到所有的值。
源a在1月3日之后作为一个新的数据源出现。我的折线图应该显示从1月1日到5日的所有值。
源a只能提供1月3日以后的更新(即使他们应该在1月1日以后给我们提供值)。我的折线图应该只显示从1月3日到5日的值。
我正试图在mysql中实现这一点。我使用groupby和having得到了一个简单的查询,但是这还不足以满足上面的用例。我本来打算用这个来写一个cte,或者使用partitionby,但又一次陷入了无法满足所有条件的困境。

oknwwptz

oknwwptz1#

你为什么不跳过考试呢 HAVING 因此,您将获得1月3日的所有数据,尽管1月2日的源a中没有数据。

SELECT sample_date, COUNT(source_data_id) AS NUMBER_OF_SOURCES, 
SUM(value) AS TOTAL_VALUE
FROM sample_history_data
WHERE SOURCE_DATA_ID IN ('A','B','C')
GROUP BY sample_date
ORDER BY sample_date ASC;
sample_date NUMBER_OF_SOURCES   TOTAL_VALUE
2001-01-01  3   30
2001-01-02  3   30
2001-01-03  2   20
2001-01-04  3   30
2001-01-05  3   30

相关问题