我有一个表,其中包含
- 非唯一标识
- n 列各种数据
数据更新的日期
我有一个查询,给定一个日期范围,它会获取在该日期范围内更新的条目列表以及在它刚刚找到的更新之前的最后一次更新的条目。通常,日期范围在一天内,因此 07-10-2013 00:00:000 - 7-11-2013 00:00:000。
例如。给定 07-10-2013 00:00:000 - 7-11-2013 00:00:000,查询找到 2 个条目
id new data updatedate old data last updatedate
3 randomdata 7-10-2013 03:30:343 randomdata 7-05-2013 06:34:764
4 randomdata 7-10-2013 13:30:343 randomdata 6-09-2013 04:37:376
这是我想要得到的结果。目前我已经有一个执行此操作的查询,但查询速度很慢,因为在一个有很多条目的表上有 3 个内部连接,我想知道是否有人能想出一种方法来加快查询速度。使用 SQL Server 2000。
表信息
- 非唯一标识
- 唯一 ID(这只是一个自动增量 ID)
- 要收集的各种数据
- 更新日期
编辑:
索引目前在id
并且updatedate
我目前正在使用的查询(概括它)::WARNING::这不漂亮::WARNING::
select *
from
(select distinct
s1.id as id,
s1.randData1, s2.randData1, s1.randData2, s2.randData2,...,
s1.updatedate as newupdatedate,
s2.updatedate as prevupdatedate,
datediff(second, s1.updatedate ,s2.updatedate) as maxdate
from
(select *
from updates
where updatedate >= '{0}' and updatedate < '{1}'
and id in ('{3}')) as s1
inner join
updates s2 on s1.id = s2.id and s1.updateid != s2.updateid) as t1
inner join
(select
s1.id, max(datediff(second, s1.updatedate, s2.updatedate)) as maxdate2
from updates s1
inner join updates s2 on s1.id in ('{3}') and s1.id = s2.id and s1.updateid != s2.updateid
where datediff(second, s1.updatedate, s2.updatedate) < 0
and s1.updatedate < '{1}' and s2.updatedate < '{1}'
group by
s1.id) as t2 on t1.id = t2.id and t1.maxdate = t2.maxdate2
{0} {1} 和 {2} 是传入的参数。
编辑:如果有任何区别,查询正在 C# 中执行。如有必要,2个查询也很好。我最终要寻找的是所选日期的数据发生了什么变化。