我想加入两个表,但只显示唯一行和最新日期。加入两个表,只显示唯一值和最大日期
在线观看我发现了各种方法来实现或连接两个表格,或者在单个表格中选择唯一行(和最新日期)。我将如何去结合这两个?
连接两个表:
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 *'?尝试列出你想要的字段。 –
你为什么不简单地把你的查询和预期的输出放在这里,让我们变得容易? –