2013-02-16 34 views
2

所以我有兩個查詢給我需要的信息,我試圖找出從他們得到結果的最佳方式。我有一張控股表。使用:SQL連接或PHP循環?或者是什麼?

SELECT symbol, sum(shares) AS shares, sum(shares * price) AS cost 
FROM Transactions 
WHERE (action <>5) 
    AND date <= '2010-10-30' 
GROUP BY symbol HAVING sum(shares) > 0 

導致

AGNC 50.00  1390.0000 
RSO  1517.00 9981.8600 
T  265.00 6668.7500 

我再有另一個查詢

SELECT close FROM History WHERE symbol = $symbol AND date = $date 

將返回的那一天的收盤價。

T 24.40 

我想基本上爲一個給定的日期計算值所以總和(股票*關閉)爲每個符號。但我不知道如何做到這一點循環通過在PHP中的每一行。我希望有一個加入或我可以在SQL中做的事情,使數據以我想要的方式返回

+0

僅供參考您可以使用數字來比較日期值'日期'<= 20101030但日期是保留字,它不應該是列名稱。 – Popnoodles 2013-02-16 16:40:13

+0

@popnoodles - 但正如很多人使用日期作爲列名,它是少數幾個不需要反引號的保留字之一 – 2013-02-16 16:51:50

+0

是真的Mark還是你在拉我的腿? – Popnoodles 2013-02-16 17:14:07

回答

0

我認爲你可以做類似這樣的事情:A select query selecting a select statement把你的第二個查詢字面地放在你的第一個查詢中。不知道確切的語法,但像:

SELECT 
    symbol, 
    sum(shares) AS shares, 
    sum(shares * price) AS cost, 
    sum(shares * close) as value 
FROM Transactions 
INNER JOIN History ON (symbol = $symbol AND date = $date) 
WHERE (action <>5) 
    AND date <= '2010-10-30' 
GROUP BY symbol HAVING sum(shares) > 0 

@ popnoodles是正確的,但你的命名雖然。如果你使用日期,我認爲你需要[日期]。

+0

在那裏使用另一個選擇查詢的問題是,它只給了我一個符號。正如您在第一個查詢示例中看到的,我有多個符號。我希望有可能會加入某種我可以做的事情。其他明智的病態只需要在php – brandenwagner 2013-02-16 16:49:20

+1

中做一個循環那麼,我想你可以做一些像'INNER JOIN History ON(symbol = $ symbol and date = $ date)'的東西',然後添加到你選擇的列表的附近並在那裏使用它。我認爲這將起作用。我不確定你是否可以這樣做,但我認爲你可以。 – Leeish 2013-02-16 16:56:21

+0

'INNER JOIN歷史ON(History.symbol = Transactions.symbol AND History.date = Transactions.date)'? – Popnoodles 2013-02-16 17:15:22