【发布时间】:2016-04-30 20:09:02
【问题描述】:
我正在寻找一种在联接和联合之间混合的查找。我的主数据集中有大量记录,所以我想做一些不会是多对多矩阵的“蛮力”方法的事情。
这是我的主要数据集,称为“全部”,其中已经包含列出的每个产品的价格。
product date price
apple 1/1/2011 1.05
apple 1/3/2011 1.02
apple 1/4/2011 1.07
pepper 1/2/2011 0.73
pepper 1/3/2011 0.75
pepper 1/6/2011 0.79
我的其他数据集(“价格” - 此处未显示,但包含相同的两个键,产品和日期)包含所有产品在每个可能日期的价格。我想创建的哈希表查找基本上会查找“所有”表中的每个日期,并输出该日期 ALL 产品的价格,从而生成如下表:
product date price
apple 1/1/2011 1.05
pepper 1/1/2011 0.71 *
apple 1/2/2011 1.04 *
pepper 1/2/2011 0.73
apple 1/3/2011 1.02
pepper 1/3/2011 0.75
apple 1/4/2011 1.07
pepper 1/4/2011 0.76 *
apple 1/6/2011 1.10 *
pepper 1/6/2011 0.79
也就是说,只要一种产品有一个指定日期和价格的“全部”表,所有其他产品也应该从查找表中提取它。 星号表示价格是从价格表中查找的,包含产品价格的新行基本上被插入到新表中。
如果哈希表不是解决此问题的好方法,请告诉我替代方法。
【问题讨论】:
-
您想要的 WANT 数据集只是 PRICES 数据集的一个子集吗? (来自 PRICES 的记录,其中 DATE 是 ALL 中的日期之一?)。 ALL 和 PRICES 中有多少条记录?
-
就本示例而言,是的。实际上,每个密钥实际上都有数千个交易,其中价格列出了不同的产品、日期和价格。这就是为什么我认为哈希在这里是可靠的。
-
但是,这个想法是每个日期的所有产品都需要价格,只要该日期列出了至少一种产品。
-
建议您编辑数据,使 ALL 每个键都有一些事务,并添加一个 PRICES 数据集。您愿意接受 SQL 解决方案吗?
-
当然。我知道蛮力方法是在价格上留下连接,然后通过消除价格中所有日期的过程,这些日期在所有中都不是。我希望有更优雅的东西,但我对方法并不严格。