我有一个庞大的数据库,我想根据一列进行抽样。 该列有10个不同的值,对于每个值,我想从数据库中选择5行。
我尝试了这种查询,但是一旦数据变大,它就会非常慢。
SELECT *
FROM table AS A
WHERE rowid IN (SELECT rowid FROM table WHERE value=A.value LIMIT 5)
Input:
SOURCE DATE VALUE
IG 2018-12-31 ONE
IG 2019-05-24 TWO
IG 2018-12-31 THREE
TW 2019-06-24 SIX
FB 2019-06-24 FIVE
FB 2019-06-24 FIVE
FB 2019-06-24 ONE
FB 2019-06-24 THREE
FB 2019-06-18 FIVE
FB 2019-06-18 SIX
FB 2019-06-18 ONE
FB 2019-06-18 ONE
IG 2019-06-24 TWO
FB 2019-05-24 THREE
IG 2019-06-24 THREE
RD 2019-06-24 TWO
RD 2019-06-24 SIX
RD 2019-06-24 ONE
TW 2019-06-24 FIVE
FB 2019-06-24 TWO
=============
Output:
SOURCE DATE VALUE
FB 2019-06-24 ONE
FB 2019-06-18 ONE
IG 2019-05-24 TWO
RD 2019-06-24 TWO
FB 2019-05-24 THREE
IG 2019-06-24 THREE
FB 2019-06-24 FIVE
FB 2019-06-24 FIVE
FB 2019-06-18 SIX
RD 2019-06-24 SIX
答案 0 :(得分:0)
窗口函数(需要sqlite 3.25或更高版本)允许一种简单的方法:
SELECT source, date, value
FROM (SELECT source, date, value
, row_number() OVER (PARTITION BY value) AS rn
FROM yourtable)
WHERE rn <= 5
ORDER BY value;
为每个不同的value
插入任意五行。在value
上建立索引将非常有帮助-如果您还没有索引,也会加快您的版本。