请看下面这个简单的事件计数表:
| 事件名称|计数|
| - ------|- ------|
| 视图已加载|二十个|
| 视图已卸载|十七|
| 按钮攻丝|十二|
| 视图滚动|十二|
| 网络成功|九|
| 已连接|九|
| 网络故障|第二章|
| 闰秒|无|
我想按计数选择前N个事件,但有一个额外的要求,即如果结果集包含具有特定计数的 * 任何 * 事件,那么它应该包含具有该计数的 * 所有 * 事件。换句话说,我不想拆分任何具有相同计数的行"组"。相反,我可能会得到比我要求的更多的行。
例如,如果我想要上表中的"前五个"事件,查询实际上将返回六行,这样计数为9的两个事件都包括在内。前四个事件的查询将返回四行,前三个事件的查询也将返回四行。
我如何在SQLite中实现这一点?
2条答案
按热度按时间atmip9wb1#
您可以使用
RANK
窗口函数来完成此任务。对于相同的值,它的排名值将相等,但在需要分配下一个排名时将考虑过去的行数。检查here演示。
yv5phkfx2#
一种方法是使用公用表表达式来标识与“前五个”事件相对应的计数: