当前位置: 首页 > 面试题库 >

SQL:选择“ ntil”。

慎俊艾
2023-03-14
问题内容

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

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

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

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

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

我正在使用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.size, d.date_created
HAVING sum(d2.size) <= 600
ORDER BY d.date_created DESC

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

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

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



 类似资料:
  • 本文向大家介绍SQL 用CASE选择,包括了SQL 用CASE选择的使用技巧和注意事项,需要的朋友参考一下 示例 当需要动态应用结果时,可以使用CASE语句来实现它。 也可以链式 一个人也可以CASE在另一个CASE陈述中            

  • 问题内容: 我在SQL数据库表中使用了带有2个字段的select Disctinct语句。这是我的代码。 并产生错误:。请帮忙 问题答案: 您在sql语句中只选择了一个列Author。BookCode不存在,因此也不会出现在数据集中。 将BookCode包含在Sql语句中,它将得到修复

  • 我试图选择头衔、姓氏、出生日期和头衔为“销售代表”并且他们出生在1950年之前或之后的国家。 当a把日期放在代码中时,它会给我一个错误。 我认为这是正确的: 它给ORA-01843的错误:不是有效的月份 如果你能帮助我,谢谢你。 以下是表格的示例数据:

  • 问题内容: 我在C#项目中将SQLServer用于故障排除程序,并且我有一个包含ID,Question,QuestionId,Solution和Rank的表。我希望有一个问题的多个解决方案,并且程序将选择排名最高的解决方案,该解决方案仅由最高的数字来选择,该数字在每次正确时都会递增。为此,我有以下SQL语句: 当我只有一个可用的解决方案时,它可以很好地工作,但是当我有多个解决方案时,它却不能。 问

  • 问题内容: 我想写这样的查询: 对于具有这些列的表:ColA ColB ColC,ColD 从表顺序中选择第一个(ColA,ColB,ColC,ColD)与众不同(ColB,ColC) 该查询应该按ColD对表进行排序,然后按ColB和ColC的组合对结果进行分组(它们可能具有不同的数据类型),并返回组中的第一行(包含表的所有列)。 在MS SQL Server 2005中怎么可能? 问题答案:

  • 问题内容: 我们只是在一个旧的生产存储过程中遇到了这个问题(这里还有很多事情要做,但这只是其逻辑的一部分)。为什么有人会从表中选择前0行?这是我不熟悉的某种SQL hack或技巧吗? 问题答案: 在UNION ALL中命名列 请务必也阅读Alex K.的答案。我也曾用过很多原因。这只是最明显的一个。