【问题标题】:Count how many times a rows enter time is within the enter and exit times of all other rows计算一行进入时间在所有其他行的进入和退出时间之内的次数
【发布时间】:2021-01-02 14:33:53
【问题描述】:

我希望在记录进入队列时估计历史数据的队列长度。我想通过计算数据集中有多少行的输入时间小于记录的输入时间和退出时间大于记录的输入时间来做到这一点。

我创建了一个分隔日期和时间的数据集,我认为这样可以更容易使用,但我无法获取数据集中每条记录的行数。我试过做一个简单的聚合计数,它适用于单行,但我不知道如何进行查询来对数据集中的每一行进行计数。

例如,我有一个如下所示的数据集:

RecordID | Enter_Date_Time       | Exit_Date_Time
1          2020-09-01 6:00:00 AM   2020-09-02 7:00:00 AM
2          2020-09-01 6:00:00 AM   2020-09-02 8:00:00 AM
3          2020-09-03 4:00:00 AM   2020-09-03 3:00:00 PM
4          2020-09-02 4:00:00 AM   2020-09-04 6:00:00 AM
5          2020-09-02 6:00:00 AM   2020-09-02 8:00:00 AM
6          2020-09-05 6:00:00 AM   2020-09-07 7:00:00 PM
7          2020-09-07 3:00:00 AM   2020-09-07 9:00:00 AM
8          2020-09-07 6:00:00 AM   2020-09-08 8:00:00 AM
9          2020-09-08 6:00:00 AM   2020-09-08 9:00:00 PM
10         2020-09-08 4:00:00 AM   2020-09-09 6:00:00 AM

我希望它看起来像这样:

RecordID | Enter_Date_Time       | Exit_Date_Time        | Queue_Length
1          2020-09-01 1:00:00 AM   2020-09-02 7:00:00 AM   1
2          2020-09-01 6:00:00 AM   2020-09-02 8:00:00 PM   2
3          2020-09-03 4:00:00 AM   2020-09-03 3:00:00 PM   2
4          2020-09-02 4:00:00 AM   2020-09-04 6:00:00 AM   2
5          2020-09-02 6:00:00 AM   2020-09-02 6:00:00 AM   3
6          2020-09-05 6:00:00 AM   2020-09-07 7:00:00 PM   1
7          2020-09-07 3:00:00 AM   2020-09-07 9:00:00 AM   2 
8          2020-09-07 6:00:00 AM   2020-09-08 8:00:00 AM   3
9          2020-09-08 6:00:00 AM   2020-09-08 9:00:00 PM   2
10         2020-09-08 4:00:00 AM   2020-09-09 6:00:00 AM   1

对于一条记录,我当前的查询如下所示,并手动输入该行的时间:

SELECT COUNT(*) 
FROM tbl
WHERE Enter_Date_Time >= '2020-09-02 6:00:00 AM'
   AND Exit_Date_Time <= '2020-09-02 6:00:00 AM'

我需要对数据集中的每一行进行这样的简单操作,并将 where 子句中的时间作为记录的输入时间。

非常感谢您的专业知识!

【问题讨论】:

    标签: mysql sql datetime count subquery


    【解决方案1】:

    一个选项使用相关子查询:

    select
        t.*,
        (
            select 1 + count(*)
            from mytable t1
            where t1.enter_date_time < t.enter_date_time and t1.exit_date_time > t.enter_date_time
        ) queue_length
    from mytable t
    

    【讨论】:

    • 这很好用,谢谢!你介意解释一下它是如何工作的吗?我真的很想学习,而不是仅仅得到答案。
    • @smarkhami:子查询计算表中有多少行在当前行的该日期之前开始并结束。将+1 添加到此即可获得队列长度。
    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 2018-08-28
    • 2019-09-11
    • 2016-09-05
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多