admin

SQL:选择“ ntil”。

sql

我正在寻找一种选择方法,直到达到总和。

我的“文档”表中有“ tag_id”和“ size”字段。

我想选择所有文档,tag_id = 26但是我只能处理600个尺寸的文档。因此,当我知道前十个文件的总和已超过600个单位时,选择100个文件并丢弃其中的90个文件是没有意义的。

因此,目标是:当我要丢弃大部分数据时,不要带回大量数据进行解析。

…但是我也很想避免在此应用程序中引入使用游标的功能。

我正在使用mysql。


阅读 108

收藏
2021-05-10

共1个答案

admin

您需要某种方式来排序在合计最大单位时哪些记录比其他记录具有优先权。否则,您如何知道您保留的记录集总计达600条?

SELECT d.id, d.size, d.date_created
FROM documents d
INNER JOIN documents d2 ON d2.tag_id=d.tag_id AND d2.date_created >= d.date_created
WHERE d.tag_id=26
GROUP BY d.id, d.size, d.date_created
HAVING sum(d2.size) <= 600
ORDER BY d.date_created DESC

这只是入门的基本查询,还有许多问题需要解决:

  • 它在<= 600处停止,因此在大多数情况下,您不会完全满足您的尺寸限制。这意味着您可能想要对其进行调整以允许再添加一条记录。例如,如果第一条记录> 600,则查询将不返回任何内容,这可能是一个问题。
  • 以后它不会做任何事情来检查其他较小的记录,但这些记录可能仍在上限之内。
  • 具有相同date_created值的记录可能在这里和那里都被“重复计算”。

编辑已
更新,因为他添加了按日期排序的信息。

2021-05-10