我使用SQL-server.I有一個表的樣子:儘量避免參加大型表
Name timestamp var1
Bill 2015-02-05 10:10:10 x1
Bill 2015-02-05 10:10:11 x2
...
Jim 2015-02-05 10:10:10 y1
Jim 2015-02-05 10:10:11 y2
...
John 2015-02-05 10:10:10 z1
John 2015-02-05 10:10:11 z2
表是非常大的發言權一個百萬行和時間戳每秒更新一次。我想選擇在任何一分鐘內var1值變化delta var1(即x61-x1或x62-x2等)在5-7之間的人。這是我加入的代碼。
declare @duration int
set @duration = 60
SELECT a.name,
a.var1-b.var1 AS change
From Table1 a
inner join Table1 b
on a.name = b.name
and a.timestamp = b.timestamp + @duration
Where change between 5 and 7
但是,我知道有兩個主要問題。
- 時間戳不能像這樣比較。有什麼方法可以解決它嗎?
- 我的表太大。如果每次加入,運行時間都會很長。任何想法,以避免這一點?
你有沒有索引名稱和時間戳在你的表上?如果不是,請添加一個。 – 2015-02-05 16:21:49
1百萬行不是「非常大」;) – Jamiec 2015-02-05 16:21:57
我不太明白你想要達到什麼。你想選擇所有更新的時間戳相對接近(在一些三角洲內)的人? – ddinchev 2015-02-05 16:23:17