![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
WKテーブルにカラム ID(PK), POSTNO, DATA, FLAGがあります。
POSTID毎にIDで小さい順に並べて2件以上の行にFLAGを1に設定したいです。
以下のようなイメージです。 カンマは実際にはありません。
select * from WK;
ID POSTID DATA FLAG
1 1 aaaa 0
2 1 bbbb 0
3 1 cccc 0 →これを1
4 1 dddd 0 →これを1
5 5 eeee 0
6 5 ffff 0
7 5 gggg 0 →これを1
8 4 hhhh 0
9 4 iiii 0
10 4 jjjj 0 →これを1
まず行単位にPOSTID毎の件数が必要と思い以下のselect文を書いてみました。
更にPOSTID毎に上位2件以外を抽出するにはどうすればいいでしょうか。
またはもっと上手いやり方があればご教示お願いします。
select a.ID, a.POSTID, b.CNT
from WK a,
(select POSTID, ID,
count(POSTID) as CNT
from WK
group by POSTID) b
where b.POSTID = a.POSTID
order by a.POSTID, a.ID;
ID POSTID CNT
1 1 4
2 1 4
3 1 4 この行を抽出したい
4 1 4 この行を抽出したい
8 4 3
9 4 3
10 4 3 この行を抽出したい
5 5 3
6 5 3
7 5 3 この行を抽出したい
No.1ベストアンサー
- 回答日時:
こんな感じでは?
//元データ
create table WK(ID int not null primary key, POSTID int, DATA varchar(20), FLAG tinyint);
insert into WK values(1,1,'aaaa',0),(2,1,'bbbb',0),(3,1,'cccc',0),(4,1,'dddd',0),(5,5,'eeee',0),(6,5,'ffff',0),(7,5,'gggg',0),(8,4,'hhhh',0),(9,4,'iiii',0),(10,4,'jjjj',0);
//アップデート
update WK as t0
inner join (select ID from WK as t1 where
(select count(*) +1 from WK AS t2 WHERE t2.ID < t1.ID and t2.POSTID=t1.POSTID)
>2) as t3 on t0.ID=t3.ID
set FLAG=1
where t3.ID is not null;
//表示
select * from WK;
※考え方
POSTIDごとにID順でランクをつけ、そのランクが2より大きいもののIDをつかって
アップデートする。
おぉ~出来ました!
update文込みのご回答までいただき感激です。
ランク付けの方法大変参考になります。
SQL道まだまだ精進いたします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
SQLローダーCSV取込で、囲み文...
-
select文の実行結果に空白行を...
-
単一グループのグループ関数で...
-
where句中のtrim関数について
-
文字2桁、3桁交じりの文字列...
-
【MySQL】 DECIMAL(2,1) に 13...
-
int型フィールドにnullを登録で...
-
【PL/SQL】FROM区に変数を使う方法
-
データ
-
<SQL>重複しているデータの場合...
-
group byの並び順を変えるだけ...
-
並べ替えについて
-
VBScriptにて、csvファイルから...
-
レコードの登録順がおかしい
-
SELECTした合計値をそのまま割...
-
トランザクションログを出力せ...
-
BLOBやCLOBのパフォーマンスを...
-
Oracleで「文字が無効です」の...
-
コンボボックスのソートについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
OUTER JOIN とgroup by
-
結合したテーブルに名前をつけ...
-
ストアドファンクションの再帰...
-
ビュー定義に集約関数を入れる...
-
SQL 自己結合で件数の条件指定
-
【初歩】項目別の合計件数をSQL...
-
最大値の数をカウントしたい
-
SQL 重複レコードの数え方
-
SQL カラムの値ごとの集計
-
市区町村別の件数をカウントす...
-
小数点以下桁数が最大の値に小...
-
同じテーブルでのUNION
-
以下のテーブルa,bから目的とす...
-
【バグ?】ORDER BY DESCでempty
-
初歩的な質問ですが、教えてく...
-
複雑な並び替え処理
-
特定の数だけ取得するSQL文
-
重複データを除外する際に条件...
-
東京とその他で集計するには
おすすめ情報