具有来自同一行的值的子查询

时间:2011-09-13 05:14:13

标签: mysql join subquery

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;

这个问题的最佳选择是什么?

谢谢, 马尔科

1 个答案:

答案 0 :(得分:0)

您可以使用

 T1.mysql_id,

在where子句中限制子查询中的搜索,这可能会解决您的问题