有趣的SQL查询问题

时间:2014-04-28 21:39:28

标签: sql sql-server-2008

我有一张像这样的表(是的结构很糟糕,不能改变它):

Id |  line | Status|TimeStamp |  AssociationID
1  |   A   | close | 10:30 am |  f2da3
2  |   A   | ack   | 10:15 am |  f2da3
3  |   A   | open  | 10:00 am |  f2da3
4  |   A   | close | 09:10 am |  j7s9d
5  |   A   | ack   | 08:45 am |  j7s9d
6  |   A   | open  | 08:00 am |  j7s9d

注意:TimeStamp是datetime数据类型。

我需要一个SQL查询,它会告诉我每AssociationID.次'打开'到'关闭'之间的经过时间(以分钟为单位)

因此输出表看起来像:

AssociationID | OpenToCloseTime
   f2da3      |    30
   j7s9d      |    70

SQL查询会是什么样的?我非常偏离我的元素,感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

这是你在找什么?如果提供了associationId,则状态是唯一的。

WITH A AS
(
    SELECT * FROM tableA WHERE status = 'Close' 
)
,B as
(
    SELECT * FROM tableA WHERE Status = 'Open'
)
SELECT
    A.AssociationID,
    DATEDIFF(minute,A.TimeStamp,B.TimeStamp) 
FROM A 
INNER JOIN B ON
A.AssociationID = B.AssociationId