2013-06-19 43 views
0

我正在使用mySql 5.1。我遇到了麻煩。以下查詢工作正常。我想用數據庫中的值替換常數值100就相應的SID。但我不知道該怎麼做。從多個表中乘以數值MySQL

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. 有沒有更好的方法來做到這一點?

任何幫助將不勝感激..

+0

在您的示例中,結果似乎與您的查詢不匹配。 'Date('Time')'函數會從日期中刪除時間。在你的結果中,日期有時間。 – Tom

+0

@Tom:感謝您的快速回復。這是我的錯誤。我已更新問題 – Anand

+0

您的示例結果仍與您提供的原始查詢不匹配。這是讓事情變得混亂的原因。在你給出的原始查詢中,每個Date/SID組合將只有一個值(因爲你的「GROUP BY」子句)。在您的結果中,您對同一個日期/ SID有多個結果。如果這些匹配,就會更容易知道你在找什麼。 – Tom

回答

1

我認爲這是你在找什麼。我只是加盟表2,並從那裏安勤並取代了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,您會得到多個結果。

+0

您的代碼正好返回我的代碼給出的內容。實際上它會使實際數據丟失一些數據。在實際的表中,有158行,執行查詢後,它減少到107,幾乎丟失了51行。 – Anand

+2

它是由SID和日期分組的。我猜測行不會丟失,但會被分組在一起。如果您有任何具有相同日期的SID,則結果將少於輸入行。如果這不是你正在尋找的,你應該更新你的問題來澄清這一點。 – Tom

+0

你是對的湯姆。謝謝 – Anand

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;