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 join
和 group 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.
首先,我没有要显示的代码(但有充分的理由)。在我再次尝试之前我需要一个指针或方向,因为我已经尝试创建递归函数等失败了几次。有点放弃了,我想我会问你专家,因为我迷茫和压力很大。
我的场景是这样的。
我使用 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 join
和 group 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.