Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 子查询或联接以匹配值范围内2个字段上的2个表_Mysql_Sql_Join_Subquery - Fatal编程技术网

Mysql 子查询或联接以匹配值范围内2个字段上的2个表

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

我想知道,对于每个独特的采购日期,product_Selled字段中有多少商品等于productfield中的商品,其中chk_日期在采购日期的31天内,除以该31天内售出的商品总数

两个大条件是,产品_中售出的物品与产品中的物品相等,为了使匹配有效,表2中的日期范围必须在表1的一个月内

“产品”字段是唯一的,而“产品”字段可以有重复的产品。“采购日期”字段仅因年份和月份而异

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=date\u ADDpd.pur_date,INTERVAL-1个月时,为什么需要指定t2.chk_dateoutput_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