1

table12 つのテーブル (と)を結合したままですtable2

globalcid1 番目のテーブルには各レコードの一意の が含まれ、2 番目のテーブルには同じ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

[table2] GROUP BY table2.globalcid のレコードを含む [table1] のレコードのみを返すクエリが必要ですが、各 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

内部結合は、 table1に一致する ID を持たないtable2のすべてのレコードを除外します。MAX/GROUP BY は、各globalcidのrecordidの最大値を引き出します。

于 2012-06-26T07:25:36.447 に答える