我正在从TSQL的角度看待这个问题,但任何建议,将不胜感激。如何从仓库中挑选物品以最小化TSQL中的旅行?
情景
我有2套,其识别在仓库中的物品的标准来进行选择。
查询1返回100项
查询2返回100项
我需要选择100项中任25在查询返回1.
我需要选择100项中任25在查询返回的2.
- 查询1/2中的项目将永远不会相同。
每个项目都存储在仓库的一部分中。
仓库的一部分可能包含许多物品。
我希望选择50个项目(每个查询25个),以减少我必须访问的段数来选择项目。
建议的方法
我最初的想法一直是结合2个的结果集,并产生
段ID列表,NumberOfItemsRequiredInSegment
然后,我会从每个查询选择25个项目,优先考虑NumberOfItemsRequiredInSegment最多的部分。
我知道这不会是最佳的,但会很容易实现启发式。
问题
1)我怀疑这是一个标准的组合问题,但我不承认它..也许多个背包,没有人认识它?
2)是否有更好的(易于启发)启发式或解决方案 - 理想情况下在TSQL?
非常感谢。
解决了吗?我不知道我遵循,但你不能只做一个SELECT TOP 50 * FROM((SELECT * FROM q1)UNION ALL(SELECT * FROM q2))c ORDER BY NumberOfItemsRequiredInSegment DESC – 2012-07-30 18:43:30
嗨弗雷德里克,不,因为我仍然从每个列表中精确地需要25个 – Jonno 2012-07-30 21:56:43
然后或许SELECT * FROM((SELECT TOP 25 * FROM q1 ORDER BY NumberOfItemsRequiredInSegment)UNION ALL(SELECT TOP 25 * FROM q2 ORDER BY NumberOfItemsRequiredInSegment))a。或者,如果您可以扩大/重述这个问题,那将会很棒。 – 2012-07-31 06:10:16