SQL:选择“直到”

我正在寻找一种方法来选择,直到达到一笔金额.

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

我想用tag_id = 26选择所有文档,但我知道我只能处理600个单位的大小.因此,当我知道前10个文件已经加入>时,选择100个文件并丢弃其中的90个文件是没有意义的. 600个单位.

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

…但我也非常希望避免在此应用中使用游标.

我正在使用MysqL.

解决方法

添加到最大单位时,您需要某种方式来订购哪些记录优先于其他记录.否则,您如何知道哪些记录总计达到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.date_created
HAVING sum(d2.size) <= 600
ORDER BY d.date_created DESC

这只是一个帮助您入门的基本查询,还有许多问题需要解决

>它在< = 600处停止,因此在大多数情况下,您不会完全填写您的尺寸限制.这意味着您可能需要调整它以允许再记录一次.例如,如果第一条记录是> 600查询将不返回任何内容,这可能是一个问题.
>它不会做任何事情来检查以后可能仍然符合上限的其他较小记录.
>具有相同date_created值的记录可以在这里和那里进行“双重计算”.

编辑更新后,他添加了他按日期排序的信息.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03