0

私はmySql 5.1を使用しています。困った。以下のクエリは完璧に機能しています。対応するSIDに関して、定数値100をデータベースからの値に置き換えたいです。しかし、私はそれを行う方法がわかりません。

INSERT INTO ResultTable(SID,Date,Result) 
    SELECT SID,DATE(`Time`),(MAX(SValue)-MIN(SValue))* 100 
      FROM table1   
  GROUP BY Date(`Time`),SID;


            Table 1
------------------------------------------
SID         Time                SValue
------------------------------------------
7       2013-05-06 12:06:17     5668
8       2013-04-10 16:17:49     11434.9
8       2013-04-10 16:18:54     11435.5
7       2013-04-10 16:21:04     11436.8
7       2013-04-10 16:22:09     11437.4
8       2013-04-10 16:25:24     11439.2


    Table2
---------------------
SID     EValue
---------------------
7            10
8            100


        Result Table
------------------------------------------
SID     Date                Result
------------------------------------------
7       2013-05-06               56680
8       2013-04-10               1143490
8       2013-04-10               1143550
7       2013-04-10               114368
7       2013-04-10               114374
8       2013-04-10               1143920

既存のクエリ:

    SELECT SID,DATE(`Time`),(MAX(SValue)-MIN(SValue))* 100 
      FROM table1   
  GROUP BY Date(`Time`),SID;

私のクエリ:

      select (h1.EValue * ss.SValue) AS Emission 
        from Table2 h1 
  inner join (
       select SID, (MAX(SValue)-MIN(SValue)) AS SValue 
         from Table1 
     group by Date(`Time`), SID
      ) ss on h1.SID = ss.SID

しかし、私のクエリはいくつかの追加の値を提供します。私の質問は

  1. ここで何が間違っていますか?

  2. なぜ余分な値が来るのですか?

  3. これを行うより良い方法はありますか?

どんな助けでも大歓迎です..

4

2 に答える 2

1

これは期待どおりの結果を返しますか (私はテストせずに入力します。そのため、タイプミスの可能性があります。残念です)。

    SELECT T1.SID,DATE(T1.`Time`),(MAX(T1.SValue)-MIN(T1.SValue))* T2.EValue
        FROM table1 AS T1, Table2 AS T2
        WHERE T1.SID = T2.SID
        GROUP BY Date(T1.`Time`),T1.SID;
于 2013-06-19T13:21:56.897 に答える