2017-09-11 62 views
-1

我試過以下。查詢正在工作,但按預期方式返回更多行。如何代表最大日期加入兩個表格

SELECT x,y,z FROM 
    (SELECT (t1.HOUR*4) + INT (t1.MINUTS/15) +1 AS x,t1.AMOUNT as y, t1.DATE,t2.AMOUNT AS z FROM table1 t1 
    INNER JOIN 
    (SELECT * FROM table2 WHERE DATE=(SELECT MAX(DATE) FROM table2))AS t2 
    ON t1.STORE=t2.STORE 
    WHERE t1.DATE = (SELECT MAX(DATE) FROM table1)) 

樣本數據:具有相同的數據,但沒有對金額欄不同的業務邏輯=

STORE DATE DAY_OF_WK HOUR MINUTS AMOUNT 
574  13-03-2017 2   0  0  0.00 
574  13-03-2017 2   0  15  0.00 
574  12-03-2017 2   0  30  0.00 
574  11-03-2017 2   0  45  0.00 
574  11-03-2017 2   1  0  0.00 
574  13-03-2017 2   1  15  0.00 

兩個表。

我需要的是從兩個表中獲取最大日期的金額和時間ID。

+0

請解釋或顯示更多細節,當你說出類似「比預期更多的行」。準確地說你期望什麼?您可以用文字說明它,但是通過展示您期望的例子通常更有用。 –

+0

也許TOP N嵌套查詢將有所幫助。查看http://allenbrowne.com/subquery-01.html#TopN – June7

+0

你的問題很可能是你只加入一個非唯一值的表:STORE。任何聯接的默認行爲是從每個表中生成行的笛卡爾乘積。換句話說,如果您沒有定義唯一條件,查詢將返回滿足條件的所有表的所有可能組合。例如,如果每個表中最多有3行(樣本數據中爲13-03-2017),則查詢將與STORE 574匹配,但會返回3 x 3 = 9行。您需要決定還需要其他條件才能返回您期望的有限結果集。 –

回答

0

解決了下面的查詢=>

SELECT T1.id as x,y,z from 
(SELECT (HC.HOUR * 4) + INT (HC.MINUTS/15) + 1 AS id, AMOUNT AS y, DATE FROM table1 HC WHERE DATE = (SELECT MAX(DATE) FROM table1))T1 
LEFT JOIN 
(SELECT (HS.HOUR * 4) + INT (HS.MINUTS/15) + 1 AS id, AMOUNT as z, DATE FROM table2 HS WHERE DATE=(SELECT MAX(DATE) FROM table2))t2 ON T1.id=T2.id