使用一对多关系连接两个sql表,但希望第二个表的最大值

时间:2015-06-23 17:06:36

标签: sql sql-server max outer-join

我正在尝试连接两个表一个是一个独特的功能,秒是在与独特功能相关的几个日期上读取的。我想要第一个表中的所有记录加上最近的读数。在添加形状字段之前,我能够得到我想要的结果。通过使用代码

SELECT
   Table1.Name, Table1.ID, Table1.Shape, 
   Max(Table2.DATE) as Date 
FROM         
   Table1 
LEFT OUTER JOIN
   Table2 ON Table1.ID = table2.ID
GROUP BY
   Table1.Name, Table1.ID, Table1.Shape

形状字段是几何类型,我得到错误

  

'类型"几何"没有可比性。它不能在Group By Clause'

中使用

所以我需要以不同的方式去做,但不知道如何。

以下是两个表格的示例和所需结果。

Table1
Name| ID |Shape
AA1 | 1  | X
BA2 | 2  | Y
CA1 | 3  | Z
CA2 | 4  | Q

Table2
ID | Date
1  | 5/27/2013
1  | 6/27/2014
2  | 5/27/2013
2  | 6/27/2014
3  | 5/27/2013
3  | 6/27/2014

我想要的结果是

Name| ID |Shape |Date
AA1 | 1  | X    | 6/27/2014
BA2 | 2  | Y    | 6/27/2014
CA1 | 3  | Z    | 6/27/2014
CA2 | 4  | Q    | Null

3 个答案:

答案 0 :(得分:2)

您可以在CTE中对Table2进行汇总,找到每个ID的MAX(DATE),然后将该结果加入Table1

WITH AggregatedTable2(ID, MaxDate) AS
(
    SELECT 
        ID, MAX(DATE) 
    FROM 
        Table2 
    GROUP BY 
        ID
)
SELECT
    t1.ID, t1.Name, t1.Shape, t2.MaxDate
FROM
    Table1 t1
LEFT JOIN
    AggregatedTable2 t2 ON t1.ID = t2.ID

答案 1 :(得分:0)

尝试将几何体转换为varchar。

Select Table1.Name, Table1.ID, cast(Table1.Shape as varchar(1)) AS Shape, Max(Table2.DATE) as Date 

FROM         Table1 LEFT OUTER JOIN
                      Table2 ON Table1.ID = table2.ID

Group By Table1.Name, Table1.ID,  cast(Table1.Shape as varchar(1))

答案 2 :(得分:0)

试试这个:

SELECT  t1.Name
        , t1.ID
        , t1.Shape
        , MAX(t2.Date) As Date
FROM    Table1 AS t1
LEFT JOIN Table2 AS t2
        ON  t2.ID = t1.ID
GROUP
    BY  t1.Name
        , t1.ID
        , t1.Shape