2016-09-12 7 views
0

私は、IFタイプステートメントに基づいてMySQLでクエリを作成しようとしていますが、それをスクリプト化する方法がわかりません。 一般的にMySQLとデータベースのクエリには新しいので、このタイプのクエリが上流に作成されることを慣習で指示すれば、コンテキストの場合IFタイプステートメントin MY

私は4つのフィールドがあります。

ID, YEAR, SYSTEM, MEASURE

を私はYEAR = '2015'YEAR = '2014'間の差が500よりも大きい場合、すべてのIDを識別します。

IF文、WHERE句、または2つのSELECT文でこれを行うかどうかはわかりません。

私は

+0

if文についてもう少し明確にすることはできますか? 2015年から2014年の間の「違い」はどういう意味ですか? –

+0

いくつかのサンプルデータを共有できますか?達成しようとしていることが少し不明です。 – Shaharyar

答えて

0

SQL(MySQLと他のシステムは)基本的には、行のセットで動作する前に、データベース上の複雑なクエリを実行するために必要とされていません。だから、私は推測させて、そのようなセットの点であなたの要件を再作成しようとします。

は、あなたがこのSQLを実行する一連の仕様を翻訳する

「私は、彼らが2014年の最大値よりも500以上大きい2015年のためのID値のセットをしたい」

 SELECT ID 
     FROM table 
     WHERE YEAR = '2015' 
      AND ID > (SELECT MAX(ID) FROM table WHERE YEAR='2014') 

説明:

これは、一致する各行からID値だけを選択します。各行にIDを持つ結果セットが得られます。

 SELECT ID 

これは、セットの開始点となるテーブルの名前を指定します。

  FROM table 

これは、これはトリックである2015

 WHERE YEAR = '2015' 

以外の任意の年のためのすべての行をフィルタリングします。それはその後、2014年

  AND ID > (SELECT MAX(ID) FROM table WHERE YEAR='2014') 
で最大規模よりも値だけで500以上の大きなを選択するためにあなたの2015 ID値をフィルタ2014年のためのテーブルで最大のID値を見つけるために select文を実行します

今、私はあなたが望むものについて間違っていると推測しているかもしれません。しかし、この議論があなたの仕様をSQLで扱うことができるという点で考えるのに役立つことを願っています。

+0

ありがとう、私は明らかに質問をうまく表現していませんでしたが、これは正しい軌道に乗りました。 2015年の数値データが2014年の数値データよりも大きいIDを見つけたいと思っていました。私はそれを管理しました。私は答えに入れた – Samuel

0

IDの違いを意味するのではなく、2014年から2015年までの特定のシステムの測定値です。これが正確であれば、2015年の主なクエリ基準と2020年のJOIN同じシステムと測定の違い。

select 
     T1.ID, 
     T1.Year, 
     T1.System, 
     T1.Measure, 
     T2.Measure as Measure2014, 
     T1.Measure - T2.Measure as MeasureDifference 
    from 
     YourTable T1 
     JOIN YourTable T2 
      on T1.System = T2.System 
      AND T2.Year = 2014 
      AND T1.Measure - T2.Measure > 500 
    where 
     T1.Year = 2015 

測定値はわかりませんが、差異をABSOLUTE値チェックする必要があります。

1
SELECT a.id_farm, a.id_year, a.measure > b.measure + 500 AS test 
FROM t1 AS a 
INNER JOIN(
     SELECT id_farm, measure 
     FROM t1 
     WHERE id_year = 2014) AS b 
ON a.id_farm = b.id_farm 
WHERE id_year = 2015 
HAVING test = 1 

私はHAVINGに出くわしたことはありませんが、それを書く方法を考えた後、今は簡単に見えます!