SQL 为图形生成 table、计数或函数

SQL generate a table, count or function for graph

首先,我没有要显示的代码(但有充分的理由)。在我再次尝试之前我需要一个指针或方向,因为我已经尝试创建递归函数等失败了几次。有点放弃了,我想我会问你专家,因为我迷茫和压力很大。

我的场景是这样的。

我使用 Json 在 PHP 中创建了一个图表,这一切都很好。但是我需要的数据是我的问题。

我的记录有开始日期和结束日期。

例子

ID  14
Start_Date  03/08/2021
End_Date  07/08/2021

运行 获取记录并计算 8 月 1 日到 8 月 10 日之间的存储过程会将以上显示为单个记录。

我正在尝试创建一个折线图,其中 8 月 1 日至 2 日为空,然后 8 月 3 日至 7 日显示 1,最后 8 月 8 日至 10 日为空。

1 Aug 2021    0  
2 Aug 2021    0  
3 Aug 2021    1  
4 Aug 2021    1  
5 Aug 2021    1  
6 Aug 2021    1  
7 Aug 2021    1  
8 Aug 2021    0  
9 Aug 2021    0  
10 Aug 2021    0  

这可能吗,我都快放弃了

我最接近的是使用循环来创建一个临时的 table 并且插入记录并不漂亮而且有些令人尴尬。如果我重新制作并张贴在这里,我肯定会羞愧死的。

因此,如果有人能指出我正确的方向,提供建议或类似的任何东西,我们将不胜感激。

感谢您的阅读。

您需要从日期列表开始。有很多方法可以生成这样的列表——也许您有一个现有的 table,或者您的数据库支持一个函数。 SQL(一般情况下)支持递归 CTE,这是一种替代方法。

获得日期后,您可以使用 left joingroup by 来获取所需的计数。下面是一个使用 MySQL 语法的例子:

with recursive dates as (
      select date('2021-08-01') as dte
      union all
      select dte + interval 1 day
      from dates
      where dte < '2021-08-10'
     )
select d.dte, count(t.id)
from dates d left join
     t
     on d.dte between t.start_date and t.end_date
group by d.dte;

Here 是一个 db<>fiddle.