2011-07-22 5 views
1

実行する特定のクエリがあります。これはお互いに2つの行を引く必要があります。行全体を減算すべきではなく、指定されたフィールドのみを減算すべきです。私が引くしようとしているデータはそうのように構成されています各値に対して最初の2行だけを差し引く

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フィールドを使用しなくてもこれは可能ですか?私は、各オブジェクトが3つ以上のタイムスタンプレコードを持っていることに言及するのを忘れていましたが、私は本当に2つの最新のもののためにそれを行う必要があります。あなただけの場合

+0

私はこれを複数のオブジェクトに対してとっているので、すべてのobj-idに対してこれが起こるはずですか? – Wrikken

+0

@Wrikkenはい。私は現在、この問題に悩まされています。下のEdgarは、各obj-idに関連付けられた最大タイムスタンプ行を取得する正しい方向に私を指摘しました。すべてのobj-idに対して2番目の行を取得するにはどうすればよいでしょうか?私は限界1,1を使ってみましたが、それはテーブルの2番目の結果を返すようにしか見えません。 – Christopher

答えて

0

2つの最新のこの醜いクエリはそれを行う必要があります。

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 'テーブル' 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を使用し、主に私はもしわかりません私は許可されていない機能を使用しました。 あなたはtopの代わりにlimitを使う必要があると思います。

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 
関連する問題