0

ここに私のテーブルがあります:

ID      NAME        FAMILY_ID       HASKIDS     ISPARENT
--------------------------------------------------------
1       John        1               1           1
2       Bill        1               1           0
3       Dick        1               1           0
4       Jane        2               1           1
5       Mary        2               1           0
6       Pete        3               0           1
7       Jess        3               0           1

そして、私は結果が欲しい

NAME        FAMILY_ID
---------------------
Bill        1
Mary        2

ロジックは次のとおりです。子供がいる各家族から、最初に生まれた名前(親以外の各メンバーの最高ID)と対応する家族IDを表示します。

ここに私の最初のクエリ、query1があります:

SELECT DISTINCT family_id
FROM families
WHERE (haskids=1)
ORDER BY family_id;

これは結果として(正しく)もたらします:

1
2

私の2番目のクエリは、query2です:

SELECT TOP 1 name, family_id
FROM families
WHERE family_id IN (SELECT family_id FROM query1) AND isparent=0
ORDER BY id;

これは望ましくない結果をもたらします:

NAME        FAMILY_ID
---------------------
Bill        1

トップ 1 は各サブ結果からトップ 1 をもたらすのではなく、全体的な小さいエントリ ID をもたらすためです。

私は何かが欠けていると確信しており、これを達成する簡単な方法がありますが、その方法がわかりません。

あなたの助けを前もって感謝します

4

1 に答える 1

1
select  *
from    YourTable
where   id in
        (
        select  min(id)
        from    YourTable
        where   isparent = 0
        group by
                family_id
        )
于 2013-02-28T12:31:43.497 に答える