2016-09-02 7 views
0

誰かが助けてくれることを願っています。2つのSELECT文をGROUPとJOINのmysqlと組み合わせる

私は2つのmysql select文をそれぞれ持っていますが、それらを組み合わせる必要があります。

まず:

SELECT $shares.*, $shares_company.name AS name, SUM($shares.number) AS totalNumber, MAX(date) AS lastTransDate, $shares.timestamp AS lastUpdated FROM $shares 
INNER JOIN 
$shares_company WHERE $shares_company.id = $shares.company_id GROUP BY $shares.company_id 

第二:

SELECT $shares.price AS lastPrice 
FROM $shares WHERE ($shares.company_id,$shares.date) IN 
(SELECT $shares.company_id, MAX($shares.date) FROM $shares GROUP BY $shares.company_id) 

私はUNIONUNION ALLを試みたが、他の組み合わせのすべての種類。

私は立ち往生しています!

enter image description here

UPDATE:

まあ、それは私が今持ってどこまでです。これは、 'number'列の合計を取得する必要があることを除いて、すべての正しい情報を返し、クエリに挿入する場所がわかりません。 挿入するクエリは次のとおりです。私は今持っている

SELECT 
SUM($shares.number) AS totalNumber FROM $shares 
GROUP BY $shares.company_id 

クエリは次のとおりです。すべての助けを

SELECT $shares.price AS lastPrice, 
$shares.date AS lastTransDate, 
$shares.company_id, 
$shares.id, 
$shares.timestamp AS lastUpdated, 
$shares_company.name 
FROM $shares 

INNER JOIN $shares_company 
ON $shares_company.id = $shares.company_id 

WHERE ($shares.company_id,$shares.date) IN 
(SELECT $shares.company_id, MAX($shares.date) 
FROM $shares 
GROUP BY $shares.company_id) 

感謝。

+0

フィールド数が異なる場合は使用できません。左結合を使用しようとします。 –

+0

私は2つのステートメントの間に 'LEFT JOIN'を入れますが、喜びはありません。 –

答えて

0

私が正しく理解していれば、最初のクエリの中にlastPrice結果が必要です。

SELECT 
    $shares.*, 
    $shares_company.name AS name, 
    SUM($shares.number) AS totalNumber, 
    MAX(date) AS lastTransDate, 
    $shares.timestamp AS lastUpdated FROM $shares, 
    (SELECT $s.price 
    FROM $shares AS $s 
    WHERE $s.company_id = $shares.company_id 
    ORDER BY $s.date DESC 
    LIMIT 1 
) AS lastPrice 
    INNER JOIN $shares_company 
    ON $shares_company.id = $shares.company_id 
GROUP BY $shares.company_id 

(注:これはテストされていないが、推論を明確にする必要があります。この特定の行の最後の株価を選択するために、内側のクエリを作成し、その後、リターンその場合、私はこのような何かを試してみました別の列として)。

+0

あなたのeffordをありがとうございます、しかし、かなり動作しません。私はあなたのクエリにいくつかの変更を加えましたが、まだ運がありません。返される 'lastPrice'は、最新の 'lastUpdated'を持つ行に関連する結果ではない最初の結果です。これが理にかなってほしい。 –

+0

私のクエリで$ s.dateを$ s.lastUpdatedに変更すると動作しますか? – Tom

+0

申し訳ありませんが動作しません。私があなたの質問を変更した場合は、最後に支払った価格を除いて正しい結果が得られます。 が $共有を選択します。*、 $のshares_company.name名AS、 SUM($のshares.number)TOTALNUMBER AS、 MAX lastTransDate、 $ shares.company_id、 $ shares.price lastPrice AS AS(日)、テスト AS $株式FROM lastUpdated 、 ($のshares.dateのDESC BY $共有から$ shares.price を選択 $ shares.id = $ shares.company_id ORDER LIMIT 1 )AS の$ shares.timestamp INNER JOIN $ shares_company WHERE $ shares_company.id = $ shares.company_id GROUP BY $株。company_id –

関連する問題