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

我想这就是你要找的。我只是加入 table2 并从那里获取 EValue 并替换了 100。

SELECT  h1.SID, DATE(`Tm`), 
        (MAX(SValue)-MIN(SValue))* ss.EValue 

FROM    table1 as h1

        JOIN table2 as ss
        ON h1.SID = ss.SID

GROUP BY Date(`Tm`), h1.SID;

我认为您获得“额外”值的原因是因为您在子查询中按日期和 SID 分组,但您没有在主查询中显示日期。因此,对于具有不同日期的 SID,您将获得多个结果。

于 2013-06-19T13:20:14.880 回答
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 回答