2014-02-10 63 views
0

我有一個帶有信號名稱,值和時間戳的表格。這些信號以1採樣/秒的採樣率記錄。現在我想繪製一個關於月份值的圖表,並且系統在幾秒鐘內完成它變得非常沉重。所以我的問題是「是否有任何方法可以查看每分鐘的價值/換句話說,我希望看到每排第60行?」基於時間戳的每第10行

回答

2

可以使用row_number()函數來枚舉行,然後使用模運算來獲得行:

select signalname, value, timestamp 
from (select t.*, 
      row_number() over (order by timestamp) as seqnum 
     from table t 
    ) t 
where seqnum % 60 = 0; 

如果數據真的是有規律的,你也可以提取秒值和檢查時是0

select signalname, value, timestamp 
from table t 
where datepart(second, timestamp) = 0 

這假定timestamp被存儲在適當的日期/時間格式。

+0

Thankyou,另外還有一個問題,如果我將這張桌子與其他桌子和其他桌子連接在一起,該怎麼辦? – Furqan

+0

@Furqan。 。 。它應該工作。但是,您也可以將當前查詢放在'with'語句中以「分離」這兩組邏輯。 –

1

而是採樣的,可以使用一分鐘平均爲您的情節:

select name 
,  min(timestamp) 
,  avg(value) 
from Yourtable 
group by 
     name 
,  datediff(minute, '2013-01-01', timestamp) 

如果您圖表幾個月,甚至每小時平均可能不夠細緻。

+0

您是指每個60個樣本的平均值? – Furqan

+0

每個GROUP BY表達式都必須包含至少一個不是外部引用的列。是錯誤。 – Furqan