我在工作中有以下问题。我有一个包含不同列和几 100 000 行的大表。我只会发我感兴趣的。
假设以下数据集
设备 ID、功能 ID、功能状态
1, 1, 0
1, 2, 0
1, 3, 1
1, 4, 1
1, 5, 1
2, 1, 1
2, 2, 0
2, 3, 0
2, 4, 1
2, 5, 0
3, 1, 1
3, 2, 1
3, 3, 1
3, 4, 1
3, 5, 1
4, 1, 0
4, 2, 0
4, 3, 1
4, 4, 0
4, 5, 0
我需要选择功能状态 = 1 的行,但每个设备 ID 只选择前 2 行。
查询的结果应该是:
1,3,1
1,4,1
2,1,1
2,4,1
3,1,1
3,2,1
4,3,1
我试过这样的事情:
SELECT brdsurfid,featureidx,FeatStatus FROM Features F1 WHERE FeatStatus = 1 AND
(SELECT COUNT(*) FROM Features F2
WHERE F2.FeatureIdx <= F1.FeatureIdx AND F2.FeatStatus = 1) < 2
ORDER BY BrdSurfId,FeatureIdx;
我在另一个回复中发现了它,但它不太管用。
我知道我需要混合使用 LIMIT 或 COunt(*) 以及一些嵌套选择,但我无法弄清楚。谢谢