【发布时间】:2015-07-09 18:53:39
【问题描述】:
我希望对于每个唯一的 pur_dates,product_sold 字段中的项目数等于 product 字段中的项目,其中 chk_date 在 pur_date 的 31 天内除以 @987654326 的总数@ 在这 31 天内。
两个重要条件是product_sold 中的项目等于product 中的项目,并且要使匹配有效,table2 中的日期范围必须在 table1 的一个月内。
product 字段是唯一的,而product_sold 字段可以有重复的产品。 pur_date 字段仅随年份和月份变化。
Table1
pur_date product
2015-07-01 shirt
2015-06-01 shoe
2015-04-01 purse
2015-04-01 bag
2014-05-01 key
2015-05-01 gloves
Table2
chk_date cost product_sold
2015-07-29 9 bag
2015-07-15 10 shoe
2015-06-30 8 shirt
2014-06-25 6 bag
2015-06-01 9 shirt
2015-05-28 8 shoe
2015-05-15 4 key
2015-04-28 5 shirt
2015-03-15 6 purse
2015-03-15 4 ring
2015-03-10 4 key
2015-03-01 2 bag
我有一个不工作的子查询来做这样的事情:
Select pur_date,
(Select SUM(CASE WHEN product_sold IN (select product from table1) THEN 1 ELSE 0 END)/COUNT(product_sold)
from table2
where (pur_date - chk_date) <=31) AS percent_sold
from (select distinct pur_date from table1) t;
我得到的错误是:Illegal expression in WHEN clause of CASE
例子:
output_table
pur_date num_product_match
2015-07-01 2/3 <--for the 3 product_sold in June,2 items(shirt) match product = shirt
2015-06-01 1/2 <-- for the 2 product_sold in May,1 item(shoe) match product = shoe
2015-05-01 1/1 <-- for th 1 product_sold in April, 1 item(shirt) match product = shirt
2015-04-01 2/4 <-- for the 4 product sold in March, 2 item(purse, bag) match product = purse and product = bag
【问题讨论】:
-
问题尚不清楚......它如何决定使用哪种产品作为馏分的顶部?你在哪里指出那是什么产品?
-
只要
product_sold与product匹配,并且在一个月前product的pur_date之内,我们就总结了。我们不关心它是什么产品,只关心匹配的数量。product列是唯一的。 -
但显然不止一种产品会匹配。如果您有一行显示
2015-07-01 2/3,从逻辑上讲,您必须还有另一行显示2015-07-01 1/3。但是您的样本结果并不能证明这一点。哪个产品与哪一排搭配?对于您的 3 月示例,查询应该将 purse 和 bag 组合在一起的原因是什么? -
好吧,没关系。我现在更好地看到了这些表是如何匹配的。但是这个问题根本就不清楚。
-
我希望它现在稍微清楚一点。