sql - 如何在 SQL SERVER 2008 中使用 LAG FUNCTION

标签 sql sql-server lag

我在 SQL Server 2012 上写这个 SQL 函数

;With Quote as (
   SELECT SID,SHEET,Code, Date, Data, 
          LAG(Data) OVER(ORDER BY Date) As LastMonthData 
   FROM RMQ_DATA WHERE [SHEET] IN(0)
)
SELECT [Quote].[SID], Quote.DATE,Quote.DATA,Quote.SHEET, Quote.CODE,
       CASE 
          WHEN ISNULL(LastMonthData, 0) = 0 THEN null 
          ELSE (LastMonthData/Data) * 100 
       END As Quote,
       RMQ_SUBCAT.TARGET_CODE, RMQ_SUBCAT.RMQ_SUBCAT, RMQ_CAT.RMQ_CAT_NAME, 
       RMQ_CAT.ENABLED
FROM Quote
Left outer Join RMQ_SUBCAT on  Quote.CODE =RMQ_SUBCAT.TARGET_CODE
left outer join RMQ_CAT on RMQ_SUBCAT.TARGET_SID=RMQ_CAT.SID
where RMQ_CAT.ENABLED='Y' and 
      Quote.DATE between '2015/01/01' and '2015/11/01'

但在第一行

With Quote as ( 
   SELECT SID,SHEET,Code, Date, Data, 
          LAG(Data) OVER(ORDER BY DATE)

**LAG(Data) 我有一个错误。所以我不知道 LAG() 函数如何在 SQL Server 2008 中使用。

有人可以帮助我吗?

最佳答案

不幸的是,LAG 不适用于 SQL Server 2012 之前的版本。您必须将 ROW_NUMBER 与自连接一起使用:

;With Quote as (
   SELECT SID, SHEET,Code, [Date], Data,
          ROW_NUMBER() OVER (ORDER BY [Date]) AS rn
   FROM RMQ_DATA 
   WHERE [SHEET] IN (0)
), Quote_LAG AS (
   SELECT q1.SID, q1.SHEET, q1.Code, q1.[Date], q1.Data,
          q2.Data AS LastMonthData
   FROM Quote AS q1
   LEFT JOIN Quote AS q2 ON q1.rn = q2.rn + 1
)
... rest of the query here

关于sql - 如何在 SQL SERVER 2008 中使用 LAG FUNCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36540642/

相关文章:

php - 如果 "sale_price"大于 "price",则更新所有 WooCommerce 产品

php - $.ajax 不会删除带有复选框的多个表行

Javascript:为什么我的 Raphaeljs 动画滞后?甚至不一致

javascript - Google Chrome 在大格式数据提交方面落后

c# - 如何从连接表中检索数据?

sql - SELECT FOR UPDATE 子查询在负载下不遵守 LIMIT 子句

sql - 使用 sql 从行中计算字符串值?

SQL:查找列值匹配的行之间的差异

sql-server - 在sql server中查询一个xml(存储在varchar中)

javascript - 如何在 javascript 中使用 setTimeout 考虑延迟