2011-07-22 68 views
1

我有一個特定的查詢來運行,它應該相互減去兩行。它不應該減去整行,而只是指定的字段。我想減去數據的組織,像這樣:僅爲每個值減去前兩行

object # |  timestamp  | input_rate1 | output_rate1 | ... 

    obj1 | 2011-07-20 05:53:33 | 349393 | 25843  | ... 

    obj1 | 2011-07-20 05:23:20 | 222293 | 11019  | ... 

結果將被00:30:13 | 127100 | 48824 .

我發現了一個貼子,展示瞭如何做到這一點,但他們的數據之間的差異和我是我沒有一個可以跟蹤我所處位置的ID字段。我嘗試使用row_number(),但我的SQL服務器不支持它。

這甚至可能不使用ID字段?我忘了提及每個對象都有兩個以上的時間戳記錄,但我真的只需要爲最後兩個記錄做這件事。

+0

我認爲這是用於多個對象,因此對於每個obj-id,這應該發生? – Wrikken

+0

@Wrikken是的。我目前被困在這個問題上。下面的Edgar指出我正確的方向,以獲得與每個obj-id關聯的最大時間戳記行。我如何獲得每個obj-id的第二行?我嘗試使用限制1,1,但似乎只返回表的第二個結果。 – Christopher

回答

0

如果你只想要兩個最新的這個醜陋的查詢應該這樣做:

SELECT TIMEDIFF(FIRSTTIME.timestamp,SECONDTIME.timestamp), FIRSTTIME.inputrate1 - SECONDTIME.inputrate1, FIRSTTIME.outputrate1 - SECONDTIME.outputrate1 
FROM 
((SELECT * FROM `table` HAVING timestamp = max(timestamp)) as FIRSTTIME, 
(SELECT * FROM `table` ORDER BY TIMESTAMP LIMIT 1,1) as SECONDTIME) 
+0

我能夠獲得與每個obj-id關聯的最大時間戳記行,但是我無法獲取每個obj-id的max(如果desc)以下的行。 – Christopher

+0

(SELECT * FROM'table' ORDER BY TIMESTAMP LIMIT 1,1)獲取它 –

0
SELECT TIMEDIFF(FIRSTTIME.timestamp,SECONDTIME.timestamp), FIRSTTIME.inputrate1 - SECONDTIME.inputrate1, FIRSTTIME.outputrate1 - SECONDTIME.outputrate1 FROM 
    (SELECT TOP 2 * FROM tableNAME WHERE objectNumber = 'obj1' ORDER BY timestamp DESC) A, 
    (SELECT * FROM A WHERE MAX(timestamp) FIRSTTIME, 
    (SELECT * FROM A WHERE MIN(timestamp)) SECONDTIME 

您可能需要我承擔一點,我使用Oracle和SQL主要所以我不知道我使用了我不允許的功能。 我認爲你必須使用limit而不是top。

SELECT TIMEDIFF(FIRSTTIME.timestamp,SECONDTIME.timestamp), FIRSTTIME.inputrate1 - SECONDTIME.inputrate1, FIRSTTIME.outputrate1 - SECONDTIME.outputrate1 FROM 
    (SELECT * FROM (SELECT * FROM tableNAME WHERE objectNumber = 'obj1' ORDER BY timestamp DESC) LIMIT 2) A, 
    (SELECT * FROM A WHERE MAX(timestamp) FIRSTTIME, 
    (SELECT * FROM A WHERE MIN(timestamp)) SECONDTIME