显示报告时跳过无效日期
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;
【讨论】:
以上是关于显示报告时跳过无效日期的主要内容,如果未能解决你的问题,请参考以下文章
C#/ADO.NET - 在数据表中使用 SetField 时跳过的行?