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

テーブルには 4,200 万行と 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 に答える