lag()和lead()sql server函数从diff表中选择数据

时间:2015-06-11 14:09:21

标签: sql-server lag lead

我需要帮助才能执行以下操作:

MainTable

ID (Primary Key)
DATE_TIME
STATE

SubTable

ID (Primary Key)
DATE_TIME
LINE1

MainTable.STATE值从100更改为200时,我想选择SubTable.Line1MainTable.DATE_TIME = SubTable.DATE_TIME

似乎LAG()LEAD()函数可以在MainTable.STATE字段中检测到此数据转换。

如何使用LAG()LEAD()函数的SQL语句执行此操作?

感谢所有快速回复。由于MainTable.STATE值可以是任何值,因此我无法在sql stmt中包含其值。

3 个答案:

答案 0 :(得分:0)

这应该可以解决问题。

SELECT Line1
FROM SubTable s
INNER JOIN 
(
    SELECT DATE_TIME, State, LAG(State) OVER(ORDER BY DATE_TIME) as LastState
    FROM MainTable 
)
m
ON s.DATE_TIME = m.DATE_TIME
WHERE State = 200
AND LastState = 100

答案 1 :(得分:0)

假设我理解你的问题,你可以这样做:

var successCallback = function (response)
{
    if(typeof response == "string")
        //show message
    else
        //do something             
};

答案 2 :(得分:0)

这是一个解决方案:

SELECT *, CASE WHEN State = 200 AND LAG(State) OVER(ORDER BY ID) = 100 
               THEN (SELECT TOP 1 Line1 FROM SubTable WHERE DATE_TIME = m.DATE_TIME) END 
FROM MainTable m