1

我要加入 2 张桌子(table1table2)。

第一个表包含globalcid每条记录的唯一性,第二个表包含相同的多次出现globalcid。注:globalcid是table2对table1的引用字段。

表格1

globalcid  / itemdesc
1          / item 1
2          / item 2
3          / item 3
4          / item 4
5          / item 5

表2

globalcid    /  recordcid
1            / 1
1            / 2
2            / 1
3            / 1
3            / 2
3            / 3
5            / 1

我想要一个查询只返回来自 [table1] 的记录,其中记录在 [table2] GROUP BY table2.globalcid 但将返回每个 globalcid 的最后一条记录

在上面的示例中,它应该返回

globalcid  / itemdesc  / table2.globalcid
1          / item 1    / 2
2          / item 2    / 1
3          / item 3    / 3
5          / item 5    / 1
4

2 回答 2

3
SELECT 
    a.*,
    MAX(b.recordcid) AS maxcid
FROM 
    table1 a
INNER JOIN 
    table2 b ON a.globalcid = b.globalcid
GROUP BY 
    a.globalcid

如果您只关心recordcid并且不需要该表中的任何其他列,那么这应该没问题。但是,如果表中还有其他列,例如:

globalcid    /  recordcid   /  othercolumn 
------------------------------------------
1            / 1            /  bertrand
1            / 2            /  centipede
2            / 1            /  yarn
3            / 1            /  obviate
3            / 2            /  hyper
3            / 3            /  fish
5            / 1            /  larry

...那么该MAX()值将不会与其对应的行数据othercolumn对齐,相反,您必须将选择的最大值包装在子选择中,如下所示:

SELECT
    a.*,
    c.recordcid,
    c.othercolumn
FROM
    table1 a
INNER JOIN
    (
        SELECT globalcid, MAX(recordcid) AS maxcid
        FROM table2
        GROUP BY globalcid
    ) b ON a.globalcid = b.globalcid
INNER JOIN
    table2 c ON b.globalcid = c.globalcid AND b.maxcid = c.recordcid

导致:

globalcid    /  itemdesc    /  recordcid   /  othercolumn 
---------------------------------------------------------
1            /  item1       / 2            /  centipede
2            /  item2       / 1            /  yarn
3            /  item3       / 3            /  fish
5            /  item5       / 1            /  larry
于 2012-06-26T07:28:21.243 回答
1

您应该能够使用内部联接和聚合来实现此目的:

SELECT table1.globalcid, itemdesc, MAX(recordcid)
FROM table1 INNER JOIN table2 on table1.globalcid = table2.globalcid
GROUP BY table1.globalcid, itemdesc

内连接排除了table2中所有在table1中没有匹配 id 的记录。MAX / GROUP BY 将为每个globalcid 提取recordid的最大值。

于 2012-06-26T07:25:36.447 回答