2016-09-02 1 views
0

누군가 도움을 주길 바랍니다.GROUP 및 JOIN mysql과 두 개의 select 문을 결합

두 개의 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

두 문 사이에 '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 이름 그대로, SUM ($의 shares.number) TOTALNUMBER AS, MAX lastTransDate, $ shares.company_id, $ shares.price lastPrice AS AS (날짜) lastUpdated AS $의 shares.timestamp은 $ FROM 주는 은 ($ 주 에서 $ shares.price 을 선택 WHERE $ shares.id = $ shares.company_id $의 shares.date의 DESC ORDER BY LIMIT 1) 시험 AS INNER JOIN $ shares_company WHERE $ shares_company.id = $ shares.company_id GROUP BY $ 공유.company_id –

관련 문제