2011-09-13 43 views
0

值我有一个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

您可以使用

T1.mysql_id, 
在where子句来限制你的子查询搜索

这可能会解决你的问题