计算一行进入时间在所有其他行的进入和退出时间之内的次数
Count how many times a rows enter time is within the enter and exit times of all other rows
我希望在记录进入队列时估算历史数据的队列长度。我想通过计算数据集中有多少行的输入时间小于记录的输入时间,以及退出时间大于记录的输入时间来做到这一点。
我创建了一个分隔日期和时间的数据集,我认为这会更容易使用,但我无法计算数据集中每条记录的行数。我已经尝试做一个简单的聚合计数,它适用于单行,但我不知道如何进行查询来对数据集中的每一行进行计数。
例如,我有一个如下所示的数据集:
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 子句中的时间作为记录的输入时间。
非常感谢您的专业知识!
一个选项使用相关子查询:
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
我希望在记录进入队列时估算历史数据的队列长度。我想通过计算数据集中有多少行的输入时间小于记录的输入时间,以及退出时间大于记录的输入时间来做到这一点。
我创建了一个分隔日期和时间的数据集,我认为这会更容易使用,但我无法计算数据集中每条记录的行数。我已经尝试做一个简单的聚合计数,它适用于单行,但我不知道如何进行查询来对数据集中的每一行进行计数。
例如,我有一个如下所示的数据集:
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 子句中的时间作为记录的输入时间。
非常感谢您的专业知识!
一个选项使用相关子查询:
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