根据数据存在的最后日期获取数据



我有一个查看几个表的视图。每个表包含数据的每日快照(如果添加了新内容,则插入之前的所有内容和新内容)。为了获得最新的数据,我建立了一个这样的查询:

Select * from cu.vwmastertable
where processdate = cast(convert(varchar(8),getdate()-1,112) as int)

Processdate是告诉我们每日快照的方式。格式为:20210303.

然而,有些时候数据无法更新。因此,我使用的查询没有返回任何数据。

我试着使用:

Select * from cu.vwmastertable
where processdate = ( select max(process) date from cu.vwmastertable)

但是它运行了一个小时+。

我想用

cast(convert(varchar(8),getdate()-1,112) as int) 

如果有数据,如果没有得到前一天

cast(convert(varchar(8),getdate()-2,112) as int)

我该怎么做呢?

你有一个视图,所以我建议使用窗口函数:

select *
from (select m.*, dense_rank() over (order by processdate desc) as seqnum
from cu.vwmastertable m
) m
where seqnum = 1;

你应该能够使这更有效,只选择最近的日期…说最近一周:

select *
from (select m.*, dense_rank() over (order by processdate desc) as seqnum
from cu.vwmastertable m cross join
(values (convert(date, dateadd(day, -7, getdate()))) ) v(dte)
where processdate >= year(v.dte) * 10000 + month(v.dte) * 100 + v.dte
) m
where seqnum = 1;

你也可以添加索引来加速你的版本,但如果不了解实际运行的代码(即视图定义),就不可能提出具体的建议。

相关内容

  • 没有找到相关文章

最新更新