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

我的第二个查询是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

因为 top 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 回答