MySQL:在同一个表上有内部查询引用外部列

时间:2013-11-07 07:37:33

标签: mysql sql

我有一张看起来像这样的表

id | startTime           | endTime
1  | 2012-11-07 12:33:23 | 2012-11-07 12:44:44
3  | 2012-11-07 12:45:55 | 2012-11-07 12:48:43
9  | 2012-11-07 12:47:23 | 2012-11-07 13:00:00
13 | 2012-11-08 12:32:22 | 2012-11-08 13:00:00

如何编写一个返回我的查询

id | CountNumIDsBeforeThisIDOnSameDay | CountNumIDsThatEndedBeforeThisIDOnSameDay
1  | 0                                | 0
3  | 1                                | 1
9  | 2                                | 1
13 | 0                                | 0

其他假设

id可能不在运行编号

我不确定如何以简单的方式表达我的想法。但基本上,我知道如果我可以在子查询中引用当前行ID,我可以轻松获得计数。我也在考虑使用LEFT OUTER JOINS,但我不确定自己是否让事情变得复杂。

1 个答案:

答案 0 :(得分:1)

SQLFiddle demo

select id,
(select count(*) from T 
    where DATE(startTime)=DATE(T1.startTime)
          AND 
          StartTime<T1.StartTime  
) as 
CountNumIDsBeforeThisIDOnSameDay,

(select count(*) from T 
    where DATE(startTime)=DATE(T1.startTime)
          AND 
          EndTime<T1.StartTime  
) as 
CountNumIDsThatEndedBeforeThisIDOnSameDay


from T as T1
Order by StartTime