Crossjoin但只选择第一个

Zan*_*nam 1 sql sql-server sql-server-2012

我有一个以下格式的表:

    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
Run Code Online (Sandbox Code Playgroud)

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

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

    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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ith 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
Run Code Online (Sandbox Code Playgroud)

  • 如果OP在输出中需要更多列,或者使用CI的"(时间)". (2认同)