【问题标题】:Use LAG Function on the latest row only仅在最新行上使用滞后函数
【发布时间】:2021-06-20 10:50:42
【问题描述】:

我有一个如下所示的表格:

此表由许多行组成。我想使用 LAG 函数来计算 cyclestart 和 getdate() 之间的日期差,以获取最新记录与前一个记录的周期结束时间,否则它会计算所有记录的 LAG,我不能这样在这么大的桌子上。

select
    @AssetID,
    @ProductionDay AS 'Production Date',
    shift,
    SKU,
    CycleEnd AS 'Press Close Time',
    @shift12,
    cast( (CycleEnd - lag(CycleEnd) over (order by cycleend)) as datetime) as 'Cure Time'
from
    Cycle
where
    cycle.ID = @CycleID

如果我使用TOP 1TOP 2,那么它在治愈时间内给我NULL。

【问题讨论】:

  • 您可以创建一个具有 getdate() 的虚拟记录,然后将您选择的最后一条记录与导致 2 条记录的虚拟记录合并 => 立即使用滞后功能
  • 请提供样本数据和期望的结果。我只是不明白这个解释:“计算 cyclestart 和 getdate() 之间的日期差以获取 cycleend 时间,在最新记录上与以前的记录对比”。
  • lag(CycleEnd,1, GETDATE()) over (order by cycleend) 对你有用吗?

标签: sql sql-server lag


【解决方案1】:

LAG() 访问上一行的数据,你返回 1 行并且没有上一行,所以它总是返回 null。

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多