我正在使用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
但我的查询提供了一些额外的值。我的问题是
我在这里做错了什么?
为什么会有额外的价值?
有没有更好的方法呢?
任何帮助将不胜感激..
答案 0 :(得分: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,您将获得多个结果。
答案 1 :(得分: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;