1

我有以下格式的表格:

    Time            Quantity
    10:01:01.000    100
    10:01:01.001     50
    10:01:01.002      0
    10:01:01.003    100
    10:01:03.001    100

请注意,我已根据时间订购了上述行。

我想交叉加入(或任何其他加入),以便加入仅在第一次高于当前时间而不是全部时发生。我的最终结果如下所示:

    Time            Quantity   Time2            Quantity2
    10:01:01.000    100        10:01:01.001     50
    10:01:01.001     50        10:01:01.002      0
    10:01:01.002      0        10:01:01.003    100
    10:01:01.003    100        10:01:03.001    100
    10:01:03.001    100        NULL            NULL

该表有 4200 万行和 10 列。所以,我正在寻找有效的东西。

4

3 回答 3

5

当您使用SQL Server 2012时,您可以使用LEAD

SELECT  a.Time,
        a.Quantity,
        LEAD(Time) OVER (ORDER BY Time) Time2,
        LEAD(Quantity) OVER (ORDER BY Time) Quantity2
FROM    tableName a
于 2013-01-13T15:28:35.043 回答
1

如果时间是独一无二的,这会让你继续前进:

SELECT t1.*, t2.*
FROM myTable t1
LEFT JOIN myTable t2
    ON  t1.time < t2.time
WHERE NOT EXISTS (
           SELECT * FROM 
               myTable t3
           WHERE t3.time > t1.time AND t3.time < t2.time)
于 2013-01-13T15:26:35.503 回答
0
SELECT zt.* , nxt.*
FROM ztable zt
LEFT JOIN ztable nxt ON nxt.ztime > zt.ztime
WHERE NOT EXISTS (
    SELECT *
    FROM ztable nx
    WHERE nx.ztime > zt.ztime
    AND nx.ztime < nxt.ztime
    );

结果:

    ztime     | quantity |    ztime     | quantity 
--------------+----------+--------------+----------
 10:01:01     |      100 | 10:01:01.001 |       50
 10:01:01.001 |       50 | 10:01:01.002 |        0
 10:01:01.002 |        0 | 10:01:01.003 |      100
 10:01:01.003 |      100 | 10:01:03.001 |      100
 10:01:03.001 |      100 |              |         
(5 rows)
于 2013-01-13T15:11:50.207 回答