MySQL有一个小问题 我有以下列的数据库(Arr_Times) Mysql_id 名称 ARR_DT(到达日期时间) DC_DT(出发日期时间)
Mysql_id | Name | ARR_DT | DC_DT
1 |Doe, Jane | 2011-08-01 00:02:00 | 2011-08-01 13:32:00
2 |Doe, John | 2011-08-01 00:23:00 | 2011-08-01 18:32:00
3 |Smith, Peter | 2011-08-01 00:12:00 | 2011-08-01 08:38:00
4 |Unknown, Jane | 2011-08-01 13:03:00 | 2011-08-01 14:02:00
5 |Day, Doris | 2011-08-01 10:10:00 | 2011-08-01 13:32:00
6 |Bergman, Ingrid | 2011-08-01 11:35:00 | 2011-08-01 13:59:00
7 |Jones, Tom | 2011-08-01 00:12:00 | 2011-08-01 22:49:00
8 |Schubert, Mark | 2011-08-01 18:45:00 | 2011-09-01 02:22:00
9 |Doe, Jane | 2011-08-01 23:04:00 | 2011-010-01 03:32:00
一般来说大约有。每天150-220行,出发时间可以从抵达时间后48小时。 我试图找出在任何特定时间内有多少人在部门
例如,当人到达规则时,自动计算每一行的人员:计算ARR_DT< = current_row的ARR_DT和DC_DT>的每个人。 current_row的ARR_DT 要获得结果,例如要导出到excel数据透视表。
mysql_id | Name | ARR_DT_unix | DC_DT_unix | Number_In_department
但这会遍历每行的整个数据库,并且占用大量CPU。对于这个问题有没有更好的解决方案。
以下是我目前正在尝试的内容,但结果不正确
SELECT
T1.mysql_id,
T1.Name,
FROM_UNIXTIME(T1.ARR_DT_unix) AS ARR_DT,
FROM_UNIXTIME(T1.DC_DT_unix) AS DC_DT,
(SELECT count(T2.mysql_id) FROM dates T2 WHERE T1.ARR_DT_unix <= T2.ARR_DT_unix AND T1.DC_DT_unix > T2.ARR_DT_unix ) AS Person_Count
FROM
dates T1
INNER JOIN
dates T2
ON T1.mysql_id = T2.mysql_id
ORDER BY T1.ARR_DT_unix;
这个问题的最佳选择是什么?
谢谢, 马尔科
答案 0 :(得分:0)
您可以使用
T1.mysql_id,
在where子句中限制子查询中的搜索,这可能会解决您的问题