5
|
Michael J Swart · 技术社区 · 14 年前 |
![]() |
1
4
…仍然存在一个问题,即函数的使用(即:DATEADD)使索引无用。当索引位于原始值上时,您正在更改列的数据(暂时不将其写回表)。
|
![]() |
2
2
这似乎做得很快:
而且不需要对表进行任何重组。 一定要用秒来比较,因为分钟是四舍五入的。这在我的机器上运行不到一秒钟,使用您的表创建规范。
|
![]() |
3
2
答案重写 对于原始查询,将连接条件从
到
有很大的不同。 在这两种情况下,它都有一个temp1上的扫描作为嵌套循环的外部输入 迭代器。但是,对于第一种情况,temp2上的条件是不可搜索的,因此需要进行扫描 每行 对索引进行范围搜索以检索匹配的行。
然而
执行计划:
ExecutionPlans http://img812.imageshack.us/img812/457/executionplans.jpg |
![]() |
4
0
我的第一个建议是把这个交给一个开发人员,让他们用C或C编写一个算法# 否则,这里有一个想法。获取表中的原始数据,并在正负一分钟内创建新行。如果你用秒的话可能会有很多数据。然后将它与第二个表中的数据进行比较 |
![]() |
5
0
我通过将DateTime值转换为自2000年1月1日以来的整数分钟数,并将该值写入数据库表中的一列来处理类似的问题。因此(在您的情况下)该表如下所示:
要与此表进行比较,只需将比较值转换为整数分钟数(我为此使用了一个用户定义的函数)并进行比较。
以及将时间转换为整数分钟的函数?
当然,您可以使用SELECT语句来获得所需的结果。将DateTime值转换为分钟比直接用日期处理要快得多。 你可能会问——这有没有千年虫的问题?(毕竟,在31^2-1分钟的时候,你的时间就用完了。)是的——大约7000年后。请务必仔细记录您的代码。。。。 |
![]() |
6
-1
;带时间(ID,表1时间,表2时间) 作为 ( 选择t1.id,t1.value作为表1\u时间,t2.value作为表2\u时间 从temp1 t1 内部连接temp2 t2 ON YEAR(t1.value)=YEAR(t2.value) 和天(t1.值)=天(t2.值) 选择交易代码, 表1\u时间 从时间 其中DATEDIFF(ss,Table1\u Time,Table2\u Time)<61 |
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 8 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 9 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |