この投稿に基づいて、グループ (チャンク) からランダムなレコードを選択するこのクエリを取得しました。(背景については、SQLiteグループ内のランダム レコードの選択を参照してください) しかし、新しいフィールド "qcinfo" が "Y" に設定されている行を除外する必要があることに気付きました。
もちろん、これは、ランダム ID が qcinfo = 'Y' の ID にヒットするたびに行を非表示にしますが、これは間違っています。チャンクで考慮されないように行を除外する必要がありますが、レコードに qcinfo <> 'Y' がある場合は、チャンクのランダム レコードを生成します。
select t.chunk ,t.id, t.qcinfo, t.link from table1
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from table1
group by chunk
) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
where qcinfo <> 'Y'
以下をデータとして考える
id|link|chunk|qcinfo
2|Yes|me1|Y
3|rr|me1|
4|yy|me1|
5|uu|you2|
6|Yes|you2|Y
7|waw|you2|
8|wewe|you2|
9|eff|you2|
10|wefw|him3|
11|Yes|him3|Y
12|we|him3|
13|wefr|him3|
次の (コメント行に注意してください) は、必要なものを示していますが、Y を除外していません。サブクエリに WHERE を含めると、レコードが取得されず、理由がわかりません。
select t.chunk ,t.id, t.qcinfo, t.link from marlintag t
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from marlintag
-- where qcinfo <> 'Y'
group by chunk ) sq
on t.chunk = sq.chunk
and t.id = sq.random_id