0

根据这篇文章,我得到了从组(块)中选择随机记录的查询。(请参阅在 sqlite 组中选择随机记录作为背景)但我意识到我需要排除新字段“qcinfo”设置为“Y”的行。

当然,这会在随机 ID 达到 qcinfo = 'Y' 的位置时隐藏行,这是错误的。我需要从块中排除该行,但如果任何记录具有 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
4

1 回答 1

1

将 WHERE 子句移至子查询。

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
        where qcinfo <> 'Y'
        group by chunk
        ) sq
on      t.chunk = sq.chunk
and     t.id = sq.random_id
于 2013-08-13T19:25:17.557 回答