小编典典

查询MySQL数据库并按日期范围分组以创建图表

sql

我正在寻找从MySQL数据库创建以下图表。我知道如何实际创建图表(使用Excel或类似程序),我的问题是如何获取创建图表所需的数据。在此示例中,我可以看到1月1日有60张票处于绿线所示的状态。

在此处输入图片说明

我需要跟踪日期范围内项目的票证的历史状态。日期范围由项目经理确定(本例中为1月1日至1月9日)。

对于每张票,我都有以下一组历史数据。每次票证中发生某些更改(状态,描述,受让人,客户更新以及此问题中未显示的其他属性)时,都会在数据库中创建一个“时间戳记”条目。

ticket_num status_changed_date from_state to_state
123456 2011-01-01 18:03:44-1
123456 2011-01-01 18:10:26 1 2
123456 2011-01-01 14:37:10 2 2
123456 2011-01-02 07:55:44 2 3
123456 2011-01-03 06:12:18 3 2
123456 2011-01-04 19:03:43 3 3
123456 2011-01-05 02:05:24 3 4
123456 2011-01-06 18:13:28 4 4
123456 2011-01-07 13:14:48 4 5
123456 2011-01-09 01:35:39 5 5

如何查询给定时间(由脚本确定)的给定时间的数据库,并找出每个票证所处的状态?

例如:要生成上面显示的图表,给定日期2011-01-02 12:00:00,多少张票证处于“ 2”状态?

我尝试查询具有特定日期和范围的数据库,但无法找出获取数据以创建图表的正确方法。在此先感谢您的帮助。


阅读 180

收藏
2021-04-28

共1个答案

小编典典

好的,如果您想在特定时间获取特定状态下的记录数,我认为可能需要存储的proc。

CREATE PROCEDURE spStatesAtDate
    @Date datetime,
    @StateId int
AS
BEGIN
   SET NOCOUNT ON;

   SELECT COUNT(*) as Count
   FROM ticket_table t1
   WHERE to_state = @StateId AND status_changed_date < @Date
        AND status_changed_date = (SELECT MAX(status_changed_date) FROM ticket_table t2 where t2.ticket_num=t1.ticket_num AND status_changed_date < @Date)
END

然后在上面的示例中调用它,您的查询看起来像

EXEC spStatesAtDate @Date='2011-01-02 12:00:00', @StateId=2
2021-04-28