【发布时间】:2012-03-20 12:11:43
【问题描述】:
我怎样才能只选择下表中的一些行,以便它们总和为某个值?
Table
-----
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
2 | 1.5 | 0.0 | 7.5 | 18
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
比方说,我想要的最高值是 57...
所以我需要从上一个表中选择行,使得每行的 qty1+qty2+qty3+qty4,直到 57 值,然后丢弃其他行。在这个例子中,我会得到以下信息:
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
2 | 1.5 | 0.0 | 7.5 | 18
因为 10+20+1.5+7.5+18 = 57,所以我舍弃了第 3 行和第 4 行...
现在我希望最高值为 50,那么我应该得到:
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
2 | 1.5 | 0.0 | 7.5 | 11
由于这些值的总和为 50,并且 row2,qty4 中的 7 被忽略... (顺便说一句,行以这种特殊方式排序,因为这是我希望计算 qtys 总和的顺序......例如,先总结第一行,然后是 3,然后是 2,然后是 4,这是无效的......它们应始终按 1、2、3、4 的顺序相加...)
如果我想要这个的补充怎么办?我的意思是,我在最后一个结果中没有得到的另外两行。
第一种情况:
id | qty1 | qty2 | qty3 | qty4
------------------------------
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
第二种情况:
id | qty1 | qty2 | qty3 | qty4
------------------------------
2 | 0.0 | 0.0 | 0.0 | 7
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
(如果第二种情况太复杂,获取如何:
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
因为将第 2 行的原始数量加起来会超过 50 的值,所以我将其丢弃... 这种情况下的补码应该是:
id | qty1 | qty2 | qty3 | qty4
------------------------------
2 | 1.5 | 0.0 | 7.5 | 18
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
)
【问题讨论】:
-
我写了很多复杂的查询,我喜欢接受挑战,但这是极少数情况之一,只需要你用你选择的语言编写程序代码。
-
即使是简化的第二种情况?文章末尾括号中的最后一个...?
-
简化的第二种情况可用作查询。如果您修改您的问题以仅要求该问题(或创建一个仅要求该问题的新问题),我可以提供帮助。
-
fo 300 我将不得不向您解释我所面临的实际问题的每一个细节,而不是在这里仅展示抽象的特定细节作为示例,因此您提供的解决方案不仅仅是概括我必须翻译或改编,但我需要解决我的问题的实际解决方案。我会让你签署一份保密协议,因为这些细节是我工作中的事情,不应该为任何人所知...... ;)