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句で使用...
-
select文の実行結果に空白行を...
-
SQLローダーCSV取込で、囲み文...
-
レコードの登録順がおかしい
-
これをSQL文で出来るでしょうか?
-
Oracleで「文字が無効です」の...
-
テーブルの最後(最新)のレコー...
-
AccessのSQL文で1件のみヒット...
-
ファイルの漢数字の順番につい...
-
<SQL>重複しているデータの場合...
-
SELECTした合計値をそのまま割...
-
【PL/SQL】FROM区に変数を使う方法
-
アクセスのレポートでレコード...
-
where句中のtrim関数について
-
【SQLサーバ】float型における...
-
Excelの並び替え(文字数と画数...
-
InputBoxを抽出条件にしたSQL文
-
固定長データのテキストファイ...
-
ORMについて
-
エクセル、並び替え正しくソー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
結合したテーブルに名前をつけ...
-
OUTER JOIN とgroup by
-
ストアドファンクションの再帰...
-
SQL 自己結合で件数の条件指定
-
SQL カラムの値ごとの集計
-
同一カラム名でjoinしたところ...
-
MySQLのSUM関数について
-
MySQLで最小値
-
グループ内最大値に印を付けるS...
-
小数点以下桁数が最大の値に小...
-
【初歩】項目別の合計件数をSQL...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
2つの列が同じ値の行を取得するSQL
-
レコードの登録順がおかしい
おすすめ情報