Mysql 子查询或联接以匹配值范围内2个字段上的2个表
我想知道,对于每个独特的采购日期,product_Selled字段中有多少商品等于productfield中的商品,其中chk_日期在采购日期的31天内,除以该31天内售出的商品总数 两个大条件是,产品_中售出的物品与产品中的物品相等,为了使匹配有效,表2中的日期范围必须在表1的一个月内 “产品”字段是唯一的,而“产品”字段可以有重复的产品。“采购日期”字段仅因年份和月份而异Mysql 子查询或联接以匹配值范围内2个字段上的2个表,mysql,sql,join,subquery,Mysql,Sql,Join,Subquery,我想知道,对于每个独特的采购日期,product_Selled字段中有多少商品等于productfield中的商品,其中chk_日期在采购日期的31天内,除以该31天内售出的商品总数 两个大条件是,产品_中售出的物品与产品中的物品相等,为了使匹配有效,表2中的日期范围必须在表1的一个月内 “产品”字段是唯一的,而“产品”字段可以有重复的产品。“采购日期”字段仅因年份和月份而异 Table1 pur_date product 2015-07-01 shirt
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;
问题不清楚。。。它如何决定将哪种产品用于分数的顶部?您在何处指出该产品?只要所售产品与该产品匹配,并且在该产品购买日期前一个月内,我们将其汇总。我们不在乎它是什么产品,只在乎匹配的数量。产品栏是唯一的。但显然不止一个产品会匹配。如果您有一行显示2015-07-01 2/3,则逻辑上您还必须有另一行显示2015-07-01 1/3。但你的样本结果不能证明这一点。哪种产品与哪一行相匹配?对于您的三月样本,查询应该将钱包和袋子分组在一起的原因是什么?好的,没关系。我现在更清楚这些桌子是如何搭配的了。但是这个问题一点也不清楚。我希望它现在稍微清楚一点。这个问题不清楚。。。它如何决定将哪种产品用于分数的顶部?您在何处指出该产品?只要所售产品与该产品匹配,并且在该产品购买日期前一个月内,我们将其汇总。我们不在乎它是什么产品,只在乎匹配的数量。产品栏是唯一的。但显然不止一个产品会匹配。如果您有一行显示2015-07-01 2/3,则逻辑上您还必须有另一行显示2015-07-01 1/3。但你的样本结果不能证明这一点。哪种产品与哪一行相匹配?对于您的三月样本,查询应该将钱包和袋子分组在一起的原因是什么?好的,没关系。我现在更清楚这些桌子是如何搭配的了。但是这个问题一点也不清楚。我希望它现在稍微清楚一点。我真的不需要“\”符号,我只是想解释一下我是如何得到这个值的。该值应为浮点值,因此1/2为0.5。编辑为使用除法而不是字符串。。。但我确实建议将分子和分母作为单独的列返回。对不起,需要一些帮助才能理解,当您已经提到chk_date>=date\u ADDpd.pur_date,INTERVAL-1个月时,为什么需要指定t2.chk_date
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
SELECT pd.pur_date,
SUM(CASE WHEN t1.product IS NOT NULL THEN 1 ELSE 0 END) /
CAST(COUNT(t2.product_sold) as float) As num_product_match
FROM (SELECT DISTINCT pur_date FROM Table_1) pd
INNER JOIN Table_2 t2 ON t2.chk_date < pd.pur_date
AND t2.chk_date >= DATE_ADD(pd.pur_date, INTERVAL -1 MONTH)
LEFT JOIN Table_1 t1 ON t1.pur_date > t2.chk_date
AND t1.pur_date <= DATE_ADD(t2.chk_date, INTERVAL 1 MONTH)
AND t1.product = t2.product_sold
GROUP BY pd.pur_date