2016-07-23 8 views
1

私の現在のクエリは次のようになります。MySQLの計算は

enter image description here

各タイムスタンプ値の場合

(1469308756と1469308761)、私が欲しいへ:

SELECT * FROM `Entrys` WHERE `Timestamp` > 1469308755 AND `Timestamp` < 1469308765 AND (`Exchange` = 1 OR `Exchange` = 2) AND `Market` = 1 

それは私に次のような結果になります次のような価格のスプレッドを計算します。

For each timestamp-value 
    For each Exchange 
    For each Other-Exchange 
     Divide Exchanges price where type = 2 by Other-Exchanges price where type = 1 

これは私がそれを説明できる最高です。あなたがそれを理解していないなら、コメントを残してください。私はそれをより良く説明しようとします。

フォーマット:それはこのように動作するはずです上記のデータと

EnId.Field

943.Price/940.Price 
944.Price/939.Price 
961.Price/985.Price 
962.Price/957.Price 

は、計算された数字は、クエリの出力でなければなりません。

私のSQLスキルはそれほど高くありません。 1つのクエリ内でそのような計算を行うことも可能ですか?

答えて

1

JOINを使用する必要があります。 JOINは、2つの異なる行のデータを同じ式(WHERE節の式または選択リストの式のいずれか)で参照する場合に便利です。

だから、これらの条件を満足する別の行に行に参加する必要があります

  • 同じタイムスタンプ
  • 異なる交換
  • 最初の行は、タイプ= 2であり、2行目はタイプであります= 1

このような自己結合を行うときは、テーブルエイリアスを使用する必要があります。私は2つの行に "分子"と "分母"を使用します。

SELECT numerator.timestamp, numerator.price/denominator.price AS spread 
FROM Entrys AS numerator 
JOIN Entries AS denominator ON numerator.timestamp=denominator.timestamp 
    AND numerator.exchange <> denominator.exchange 
    AND numerator.type = 2 AND denominator.type = 1; 
+0

ありがとうございました! – Bobface