2016-11-10 18 views
1

の最後のレコードを選択します。私はテーブルを持って、各グループ

id group_id name linked_group 
1  1   Name1 
2  1   Name2 
3  1   Name3 
4  1   Name4 
5  2   Name5 
6  2   Name6 3 
7  2   Name7 
8  3   Name8 
9  3   Name9 
10 4   Name10 
11 4   Name11 

私はlinked_groupと、各グループ内の最後のレコードを取得する必要があります。

id group_id name linked_group 
4  1   Name4 
9  3   Name9 
11 4   Name11 

これを行うには? P.P.このGROUP_IDはgroup_idの= 3

+0

結果セットにgroup_id 2が表示されないのはなぜですか? –

+0

linked_group = 3、group_id = 2との結合が必要 –

+0

group_idメンバーのいずれかがlinked_groupにグループを無視していますか? –

答えて

0
SELECT Your_tableName.id ,Your_tableName.group_id ,name,linked_group 
FROM Your_tableName 
    JOIN (SELECT MAX(id) id, group_id 
      FROM Your_tableName 
      GROUP BY group_id) A ON A.id = Your_tableName.id 
0

で労働組合を必要とするので、私はテーブルが大きすぎるではない場合、クエリ以下この

SELECT g.id,g.group_id,g.name,g.linked_group 
FROM GroupTable g LEFT JOIN GroupTable g2 
ON (g.group_id = g2.group_id AND g.id < g2.id) 
WHERE g2.id IS NULL; 

enter image description here

+0

無視する必要がありますgroup_id = 2 –

0

使用してみてください、GROUP_ID = 2を無視する必要があります。

+0

エラーを発生させます。 Mansoorの答えと同様に、相関サブクエリが必要です。 – jarlh

0

ここでは、行番号シミュレーションを使用する別の方法があります。リンクされたグループを持つgroup_idsを無視するには、where existsステートメントに注意してください。

select s.id,s.group_id,s.name,s.linked_group 
from 
(
select t.*, 
      if(t.group_id <> @p , @rownumber:=1,@rownumber:[email protected] + 1) rownumber, 
      @p:=t.group_id 
from t t, (select @rownumber:=0,@p:=0) rn 
where not exists (select * from t t1 where t1.group_id = t.group_id and t1.linked_group is not null) 
order by t.group_id,t.id desc 
) s 
where s.rownumber = 1 
0

試してみてください。期待しています:)

SELECT a.* 
FROM table_name a LEFT JOIN table_name b 
ON (a.group_id = b.group_id AND a.id < b.id) 
WHERE a.group_id <> 2 AND b.id IS NULL; 
関連する問題