显示报告时跳过无效日期

Posted

技术标签:

【中文标题】显示报告时跳过无效日期【英文标题】:Skip invalid dates while showing report 【发布时间】:2019-09-13 09:57:25 【问题描述】:

我有一个表@tbl_dates,我在其中获取每个calname 的日期,并且isvaliday 列定义了特定行是否有效并且应被视为有效日期。我想根据@tbl_dates 生成一份报告,该报告将仅显示每条有效记录的验证和之前的有效日期。如果某个日期不是有效日期,则应跳过该日期并显示前一个日期。请查看输出。

    declare @tbl_dates table (calname varchar(20), rundate date, isvalidday bit)

    insert into @tbl_dates 
    values('ipc1', '2020-01-01',1),
    ('ipc1', '2020-01-02',1),
    ('ipc1', '2020-01-03',0),
    ('ipc1', '2020-01-04',1),
    ('ipc2', '2020-01-01',0),
    ('ipc2', '2020-01-02',1),
    ('ipc2', '2020-01-03',1),
    ('ipc2', '2020-01-04',1)

输出

     calname    validdate    prevvaliddate 

     ipc1      2020-01-01     NUll 
     ipc1      2020-01-02    2020-01-01
     ipc1      2020-01-04    2020-01-02
     ipc2      2020-01-02     NUll 
     ipc2      2020-01-03    2020-01-02
     ipc2      2020-01-04    2020-01-03

【问题讨论】:

在您的预期输出中 'ipc2' 发生了什么? 【参考方案1】:

假设后面的数据应该是'ipc2',看来你只需要使用LAG

SELECT td.calname,
       td.rundate AS validdate,
       LAG(td.rundate) OVER (PARTITION BY td.calname ORDER BY td.rundate) AS prevvaliddate
FROM @tbl_dates td
WHERE td.isvalidday = 1;

【讨论】:

以上是关于显示报告时跳过无效日期的主要内容,如果未能解决你的问题,请参考以下文章

分类时跳过特征,但在输出中显示特征

在 CSS 中突出显示悬停时跳过所有其他单元格

在选项卡和焦点轮廓未显示时跳过第一个导航锚

C#/ADO.NET - 在数据表中使用 SetField 时跳过的行?

Matplotlib:如何在使用日期时间轴绘图时跳过一系列小时?

将推特数据导入熊猫时跳过属性错误