【发布时间】:2016-09-13 19:03:20
【问题描述】:
我在工作中遇到以下问题。我有一个包含不同列和几 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(*) 以及一些嵌套选择,但我无法弄清楚。谢谢
【问题讨论】:
-
为什么是 MySQL 标签?
-
因为我认为了解 SQL 并使用 MySql 的人可以提供帮助。为什么不?这是一个与数据库相关的问题,即使是特定于 Sqlite,交叉经验也可能有效
标签: mysql sql sqlite select limit-per-group