我在一家公司工作,每天我都会通过更改前一天的日期来修改查询,因为报告始终是前一天的。 我想自动更改日期。我制作了一个包含两列的表格,其中一列列出了今年的所有日期,另一列列出了一些位,如果0是工作日,则1如果是假期。
通过告诉前一天是否是工作日,然后从日期中减去1(这是每天发生的事情),我已经成功地实现了一点自动化。但是问题在于,如果星期一显示为星期五,因为星期六和星期日不收费。我们还要说,如果今天是星期四,星期三和星期二,我们是假期,那么报告将在星期一运行。我要给你留下一张图片,说明这张桌子是如何用日期制成的。
请记住,如果一周中没有假期,则总是减去1。
答案 0 :(得分:1)
执行此类操作的方法与您已完成的操作很接近,但可以进一步扩展。创建一个包含每个日期的BusinessDate表,然后包含在其中实现的每个规则。您甚至可以加入诸如ReportDate
之类的列,该列将针对每个日期返回报告应在哪个日期运行。
执行一次,它将永远有效。您可能需要每年更新一次,以便以后的假期,但要比每天更新一次!
它还允许您更新特定于业务的内容,例如季度日期,公司假期等。
如果您想进一步了解该主题,请查找有关在数据仓库中创建日期维度的主题。这是您面临的一般问题。
答案 1 :(得分:0)
评论太复杂,涉及很多猜测。
因此,每天您的流程首先要确定“今天”是否为工作日。因此,您将执行以下操作:
if exists (select * from <calendar> where date = cast (getdate() as date) and IsWorkday = 1")
begin
<do stuff>
end;
然后,“执行任务”部分将使用当前日期之前的最新工作日运行报告或您的查询(或不太清楚的内容)。您可以使用以下方式找到该日期:
declare @targetdate date;
set @targetdate = (select max(date) from <calendar>
where date < cast (getdate() as date)
and IsWorkday = 1);
if @targetdate is not null
<run your query using @targetdate>
可以将其压缩为更少的代码,但逐步编写逻辑时更容易理解。