我有一个weatherForecast表。每小时插入大约700个邮政编码预测值。这些com通过三个webServices。一个在.40过去,.50过去和.55过去一小时。
除了遍历XML并将其插入我们的SQlServer 2008r2数据库的代码之外,这一切都正常工作,但是每小时都没有检查重复的邮政编码。副本被定义为一个邮政编码,它位于三个webServices中的一个以上。所以我已经解决了这个问题,我的问题是如何处理已经滑过的记录。
E.G postCode 6330在小时饲料的0.40和0.50分钟之内,因此它每小时有两个预测(很长一段时间,该表目前为900万个recods)。现在,我很容易删除这些记录。为了保持.40分钟过去的记录并删除0.50分钟,我想我可以这样做:
delete from Weather_Opticast_Forecast where lPostCode=6330 and datePart(minute, recordCreated) = '50'
或者任何人都可以看到这个问题。国际海事组织我认为可以肯定地说。过去的记录将会保留.40分钟,并且将删除.50分钟以后的记录会被删除吗?
我们知道有两个邮政编码。那些我们没有的。我是否必须编写代码来检测这些或SQL可以处理这个?我想要说的是,在每小时插入的700条记录(邮政编码)中,是否有任何在60分钟内插入的邮政编码的记录?
希望我已经清楚地解释了我的两个问题。使用纯SQL
处理这些记录的识别和删除是理想的答案 0 :(得分:1)
您可以在CTE中使用ROW_NUMBER()
来识别每小时内的后续重复项,然后将其删除:
declare @t table (ID int not null,
CreatedAt datetime not null,
PostCode varchar(19) not null)
insert into @t (ID,CreatedAt,PostCode) values
(1,'2015-06-24T09:40:00',6884),
(2,'2015-06-24T09:51:00',6884),
(3,'2015-06-24T10:30:00',2117),
(4,'2015-06-24T10:30:01',2117),
(5,'2015-06-24T10:30:02',6884)
;With Selected as (
select *,ROW_NUMBER() OVER (
PARTITION BY
PostCode,
CONVERT(date,CreatedAt),
DATEPART(hour,CreatedAt)
ORDER BY CreatedAt) as rn
from @t
)
delete from Selected where rn > 1
select * from @t
结果:
ID CreatedAt PostCode
----------- ----------------------- -------------------
1 2015-06-24 09:40:00.000 6884
3 2015-06-24 10:30:00.000 2117
5 2015-06-24 10:30:02.000 6884