我需要一个SQL查询来从消息队列中选择行,直到SUM(users_count)最多达到1000。 但是
,如果仅返回一行并且该行的users_count大于1000,就没有问题。
我需要类似的内容:(我添加了自己的关键字)
SELECT * FROM `messages_queue` UNTIL SUM(users_count) < 1000 AT LEAST 1 ROW
这是我的表结构:
messages_queue
-msg_id
-msg_body-users_count
(消息接收方的数量)
-时间(插入时间)
该解决方案将执行累积和,并在超过1000时停止:
SELECT NULL AS users_count, NULL AS total
FROM dual
WHERE (@total := 0)
UNION
SELECT users_count, @total := @total + users_count AS total
FROM messages_queue
WHERE @total < 1000;
这意味着,如果您有两个值(例如800),则总和将为1600。第一个SELECT只是初始化@total
变量。
如果要防止总和超过1000(除了单行的值大于1000的情况),那么我认为这是可行的,尽管您需要对其进行严格的测试:
SELECT NULL AS users_count, NULL AS total, NULL AS found
FROM dual
WHERE (@total := 0 OR @found := 0)
UNION
SELECT users_count, @total AS total, @found := 1 AS found
FROM messages_queue
WHERE (@total := @total + users_count)
AND @total < 1000
UNION
SELECT users_count, users_count AS total, 0 AS found
FROM messages_queue
WHERE IF(@found = 0, @found := 1, 0);
我有一个用户批次表。我只想选择,直到我的总金额达到一定金额。 考虑以下查询: 查询结果为: 我想在表格上做一个选择,直到余额总数为6。然后只返回id 1,2: 余额总计为1的另一个示例。那么应该只返回ids 1: 余额合计为11的示例。应该只返回ids,3,4: 所以,在那之后,我需要用FORUPDATE ex锁定这些行: 我尝试了窗口功能,但它不允许锁定(更新)。感谢任何帮助。
问题内容: 我陷入了涉及将水平行转换为垂直行的SQL查询(SQL Server) 以下是我的数据 转换后,该表应为 关于此的任何输入将有所帮助? 我正在尝试在分区上玩耍。但是它以某种方式不起作用!!! 谢谢 !!! 问题答案: 您可以使用: 或:
我正在从Oracle迁移到sql server 2008。 我对系统中的双表进行了一些查询, 从DUAL中选择TO_CHAR(TRUNC(sysdate,'day')-0,'YYYYMMDD') 由于SQL server中没有双表,如何在SQL server上使用getdate with convert获得相同的结果? 我还听说过为双精度添加虚拟表,但这应该适用于我的查询吗?
问题内容: 我有一张桌子,桌子之间有一对多的关系。每个记录可以有来自同一张表的n个孩子。例如 给定一个ID,我想递归选择所有文件夹记录的SUM(SIZE)。目标数据库是MySql 5,但是如果它的通用性足以在Oracle和MS- SQL中运行,那将是很好的选择。 我不知道树有多深,可能是1级,可能是50级(或更多) 问题答案: 这可能会有些帮助:http : //mikehillyer.com/a
问题内容: 我工作的一个SQL查询的表有两列,并应返回的总和列的值,直到达到它也应该返回的值列在该河段的排序条件为 例如,我的数据如下 在上表中,金额总计应在按日期排序之后进行计算,并且一旦金额达到5000分,应返回金额及其关联的日期的总计。 排序数据后,它变成如下所示 查询应返回以下结果 上述结果是因为总和达到在 我可以知道一种更好的方法来处理它吗 问题答案: 对于SQL Server,您可以使
问题内容: 我只需要检索大小字段总和为<= 150的特定记录。我有下面的桌子… 输出应为… 例如,如果我们加上70,50,25,我们得到145,即<= 150。 我将如何编写查询来完成此任务? 问题答案: 这是一个查询,将产生以上结果: 但是,您描述的想要选择最适合给定大小的用户的问题是装箱问题。这是一个NP- Hard 问题,用ANSI SQL很难解决。但是,以上内容似乎返回了正确的结果,但实际