我想加入兩個表,但只顯示唯一行和最新日期。加入兩個表,只顯示唯一值和最大日期
在線觀看我發現了各種方法來實現或連接兩個表格,或者在單個表格中選擇唯一行(和最新日期)。我將如何去結合這兩個?
連接兩個表:
select *
from Table01 AS s
left join Table02 AS p on s.id = p.id
獲取唯一行,和最新的日期 - 在一個表:
select * from (
select id_01, id_02, max(dt_date) AS MaxDt
from Table01
group by id_01, id_02) TempTable
join Table01 ComTable on
TempTable.id_01 = ComTable.id_01 and
TempTable.id_02 = ComTable.id_02 and
TempTable.MaxDt = ComTable.dt_date
order by ComTable.dt_date desc;
我想我知道如何在第二個查詢做理論上(Table01
應該是第一個查詢的結果,或者在訪問這兩個表之前獲取最新的日期行),但不知道如何在實踐中應用它。
編輯:
我所試圖做的事:
加入兩個表,選擇所有的列(不明確名稱的列將不包含或分配一個唯一的別名)。在這個新創建的連接表上,我想顯示所有唯一的行(基於id)和最新的日期。 (或者選擇最新的唯一行並加入兩個表)。
示例數據:
Table01
ID column01 column02 column0X
10 test test123 testABC
Table02
ID columnA columnB columnY dt_date
10 data01 data02 data03 01/01/2012
10 data11 data12 data13 02/02/2012
10 data21 data22 data23 03/03/2012
10 data31 data32 data33 04/04/2012
Joined Table
ID column01 column02 column0X columnA columnB columnY dt_date
10 test test123 testABC data01 data02 data03 01/01/2012
10 test test123 testABC data11 data12 data13 02/02/2012
10 test test123 testABC data21 data22 data23 03/03/2012
10 test test123 testABC data31 data32 data33 04/04/2012
Actual Output
ID column01 column02 column0X columnA columnB columnY dt_date
10 test test123 testABC data31 data32 data33 04/04/2012
在關於鏈接解決這個問題:
使用this導致以下錯誤:
The column 'xyz' was specified multiple times for 'Table01'.
刪除所有重複列(或使用唯一的別名),導致以下錯誤:
Column 'xyz' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
(其中「XYZ」可能是許多不同的列)。
SELECT
p.*, d.*
FROM Table01 p
left join
( SELECT
alotofcolumnshere,MAX(dt_date) MaxDate
FROM Table02 s
GROUP BY s.id
) d ON p.id = d.id
ORDER BY d.maxdate DESC;
請注意,這個錯誤持續存在,直到我刪除除id
列和MaxDate
在SELECT語句中的所有列。這似乎是有道理的,因爲我不能在任何其他列上進行分組。此外,前面的查詢(和相應的問題)僅嘗試查找最大日期並將其添加到另一個表中的等效行。因此,我要求提供另一種方法,因爲我認爲這不適用於數據集。
謝謝
「xyz」專欄被多次指定爲'表' - 使用谷歌這一點。無論如何,這意味着兩列在您加入的表格列表中具有相同的名稱。如果你需要的話,然後使用別名。 –
當你在底部出現錯誤時,你是否使用'SELECT *'?嘗試列出你想要的字段。 –
你爲什麼不簡單地把你的查詢和預期的輸出放在這裏,讓我們變得容易? –