假设有两个季度 Q1、Q2、Q3、Q4
Q1为20160331,Q2为20160630。
我需要编写一个查询来加载表,每次加载表时,我都需要删除给定的季度记录并使用给定的季度记录重新加载它们。
一旦我从 Q1 移动到 Q2,我不应该触及 Q1 记录,只有 Q2 记录应该被截断和重新加载。
@UseDate
是具有当前给定季度日期的变量
QuarterKey
包含加载记录的季度日期。
Stg
具有当前给定的季度数据。 Stg
始终是截断重载。
Fact 应该删除当前季度日期并重新加载它。
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Fact]') AND type in (N'U')
AND (SELECT COUNT(*) FROM [dbo].[Fact]) >0)
BEGIN
DELETE FROM [dbo].[Fact]
WHERE (SELECT MAX(QuarterKey) FROM [Fact] ) = @UseDate
END
INSERT INTO [dbo].[Fact]
SELECT * from stg
Where (SELECT MAX(QuarterKey) FROM [Stg] ) = @UseDate
当我加载 Q2 时使用此查询,Q1 数据将被删除。
从我的想法来看,这是一个小的修复,但我无法修复它。
你能帮帮我吗?
最佳答案
如果您的@usedate 具有类似 20160331 的值,那么我们需要从中提取季度,然后从 fact 中删除具有相同季度的记录。
DELETE FROM [dbo].[Fact]
WHERE Datepart(Quarter,Quarterkey) = datepart(Quarter,@useDate);
INSERT INTO [dbo].[Fact]
SELECT * from stg
Where Datepart(Quarter,Quarterkey) not in (select
datepart(Quarter,@UseDate);
如果@UseDate 已经有提取的季度数据,性能会更高效
关于SQL- 当前季度的数据必须被截断并重新加载,但上一季度的数据应该保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45366064/