对具有相对于另一个时间戳的时间戳的行的SQL查询

时间:2014-07-15 17:56:26

标签: sql sql-server tsql

SQL新手,请原谅我,如果这是一个愚蠢的问题......

我尝试计算相对于表格中每个行的某个范围内的时间戳的行数。

即。
对于TableA中的每一行R,计算其中的行数(Timestamp)< (R.Timestamp + 1Hour)和(Foo< Bar)

Row     Timestamp   Foo     Bar
        (H:MM)
1       1:00        0       1
2       1:15        1       1
3       1:30        0       1
4       1:31        1       1
5       1:32        0       1
6       2:32        1       1
7       2:50        0       1
8       3:00        1       1

Row     <Query Output>
1       3
2       2
3       2
4       1
5       1
6       1
7       1
8       0

有没有办法编写查询来执行此操作?相对于常量值执行此操作是足够直接的,但相对于给定列中的每个值执行它不会。

1 个答案:

答案 0 :(得分:1)

您可以在同一张桌子上使用Outer Apply执行此操作。

Select  A.Row, Coalesce(B.Total, 0) 
From    TableA A
Outer Apply
(
    Select  Count(*) Total
    From    TableA R
    Where   R.TimeStamp Between A.Timestamp And DateAdd(Hour, 1, A.TimeStamp)
    And     R.Foo < R.Bar
) B