当前位置: 首页 > 面试题库 >

如何在SQL SERVER 2008中使用滞后功能

笪健
2023-03-14
问题内容

我正在此SQL函数中编写SQL Server 2012

;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)我有一个错误。所以我不知道如何在SQL Server 2008中使用LAG()函数。

有人可以帮我吗?


问题答案:

遗憾的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


 类似资料:
  • 问题内容: 我在此DataBricks帖子中看到,SparkSql支持窗口函数,特别是我正在尝试使用lag()窗口函数。 我有几行信用卡交易,并且已经对它们进行了排序,现在我要遍历各行,并为每一行显示交易金额,以及当前行金额与上一行金额的差额。 在DataBricks帖子之后,我提出了这个查询,但是它给我抛出了一个异常,我无法理解为什么。 这是在PySpark中。tx是我在注册为临时表时创建的数据

  • 问题内容: 请考虑下表: 该列会自动增加,但包含空白。该列为数字。 我想通过设置相对于上述两行的方式来查看随时间的增长。那是针对行,我要相对于行(334)设置行(546 )的。因此,要为行计算的值是546/334 = 1.63473。 这是我想要实现的结果: 如何在MySQL中执行此类滞后? 请注意,该列包含空格,因此仅在与同一表上的连接将不起作用。 问题答案: 这是一个返回MySQL所需内容的解

  • 问题内容: 伙计们,我想在mysql中使用解析函数滞后。在Oracle中受支持,但在Mysql中无法做到。那么有人可以帮助我如何在Mysql中执行滞后运算吗?例如 我想使用滞后函数,以便我的输出如下 Mysql支持滞后功能吗??? 问题答案: 您可以使用用户变量来模拟它: 看到它在工作sqlfiddle直播 在这里,您可以初始化变量。这与在编写查询之前编写内容相同。 那么这些语句在select子句

  • 问题内容: 例 是否有创建系列的有效方法。例如,在每行中包含滞后值(在此示例中,直到滞后2) 这对应于 s = pd.Series([[3,4,5],[2,3,4],[1,2,3]],index = [3,4,5]) 对于时间序列很多且时间很长的数据帧,如何以有效的方式完成呢? 谢谢 看到答案后编辑 好的,最后我实现了这个功能: 它产生期望的输出,并管理结果DataFrame中列的命名。 对于系列

  • 我有一个真正的env与3个kafka机器集群,它正在接收大量数据。对于每个主题,有 25 个分区,复制因子设置为 2。 我的应用程序(基于kafka流的应用程序)从这个kafka集群获取数据的应用程序停机了一个多月。现在,每个分区都有大量滞后;高达90000000。 我知道以下参数: 我有两个消费者节点(使用kafka集群数据的相同组id)。 然而,它并没有赶上滞后,而是保持不变。有人能建议如何改

  • 问题内容: 我正在尝试将某些Windows函数(和)用于数据框,但我不知道如何使用它们。 有人可以帮我吗?在Python API文档 中,没有关于它的示例。 具体来说,我正在尝试获取数据框中数字字段的分位数。 我正在使用Spark 1.4.0。 问题答案: 要使用窗口功能,您必须先创建一个窗口。定义与普通SQL几乎相同,这意味着您可以定义顺序,分区或同时定义两者。首先让我们创建一些虚拟数据: 确保