从两个SQL表的连接中选择Distinct rows

时间:2016-10-11 17:58:20

标签: sql ms-access inner-join distinct

我试图通过加入两个表来确定以下内容: TableA:包含1列由唯一ID组成的列 TableB:包含多个列,一个列包含同一组唯一ID,但也包含一年中每一天的日期列。 例如:

Table A
Unique ID
1
2
3

Table B
UniqueID  Date    Column3  Column4
1        10/11/15 
2        10/11/15
1        11/11/15
2        11/11/15
3        11/11/15

我希望查询输出一个具有唯一ID的表以及它们在表B中出现的第一天。因此,对于唯一的1和2,仅输出第一个日期,对于唯一3,仅输出第二个日期日期。

这可能吗?

由于

3 个答案:

答案 0 :(得分:2)

根据上面的例子,JOIN部分是不必要的,但是如果你实际上只想要包含在第一个表中的记录,你可以这样做INNER JOIN

SELECT tb.UniqueID, MIN(DATE) as [Date] FROM [Table B] tb
INNER JOIN [Table_A] ta ON ta.[Unique ID] = tb.UniqueID
GROUP BY tb.UniqueID

我已经使用了你的表名和列名,尽管缺乏命名一致性,以及你的表和列中都有空格。 (就个人而言,我在任何SQL实现中都反对这一点,但那是一个单独的问题。)

如果没有加入,您只需要做...

SELECT UniqueID, MIN(DATE) as [Date] FROM [Table B]
GROUP BY UniqueID

答案 1 :(得分:1)

这是group by

select uniqueID, min(Date)
from b
group by uniqueID;

除非INNER JOIN缺少某些ID,否则您甚至不需要b

答案 2 :(得分:0)

如果表A是您的主表,可能有时候表A中的ID尚未在表B中找到,在这种情况下,您仍然希望输出表A中具有相应日期的所有值(如果找不到匹配项,则为NULL):

SELECT A.UniqueID, MIN(DATE) as [Date] FROM [Table A] A
LEFT JOIN [Table_B] B ON A.Unique ID = B.UniqueID
GROUP BY A.UniqueID