2013-02-16 42 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