在MySQL中使用子查询从一周前的数据中减去数据

在MySQL中使用子查询从一周前的数据中减去数据,mysql,sql,subquery,Mysql,Sql,Subquery,我收集了一些数据,如下所示: select date_key, count(id) from table1 where date_key between x and y group by date_key; select date_key2, count(id) from table2 where date_key2 between x-7 days and y-7 days group by date_key2; 我想获得以下一些其他数据: select date_key, count(i

我收集了一些数据,如下所示:

select date_key, count(id) from table1 where date_key between x and y group by date_key;
select date_key2, count(id) from table2 where date_key2 between x-7 days and y-7 days group by date_key2;
我想获得以下一些其他数据:

select date_key, count(id) from table1 where date_key between x and y group by date_key;
select date_key2, count(id) from table2 where date_key2 between x-7 days and y-7 days group by date_key2;
然后我想用一个除以另一个,得到结果。为此,我尝试:

SELECT t1.date_key,
   I.Converts,
   I.Converts /(SELECT J.Starts FROM (SELECT t2.`date_key`,
      count(id) AS Starts
FROM `table2` t2
WHERE date_key BETWEEN 20140225 AND 20140303
GROUP BY t2.`date_key`)J)
FROM
(
SELECT t1.`date_key`,
      count(id) AS Converts
FROM `table` t1
WHERE date_key BETWEEN 20140304 AND 20140411
GROUP BY t1.`date_key`)I;

我得到一个“子查询返回超过1行”错误。当我单独运行它们时,即选择单独的部件并运行它们时,它们运行良好,但一起运行时会崩溃。我做错了什么

要使查询正常工作,您可能需要执行联接。基本上是分别进行每个分组查询,然后在最后将它们连接在一起

在下面的查询中,我假设您想要计算每日转换率。例如,从第1天开始的用户有资格在第8天成为“皈依者”

SELECT I.date_key,
I.Converts,
I.Converts / J.`Starts`
FROM
(
    SELECT t2.`date_key`,
    count(id) AS `Starts`
    FROM `table2` AS t2
    WHERE date_key BETWEEN '2014-02-25' AND '2014-03-03'
    GROUP BY t2.`date_key`
) AS J
JOIN
(
    SELECT t1.`date_key`,
    count(id) AS Converts
    FROM `table` AS t1
    WHERE date_key BETWEEN '2014-03-04' AND '2014-04-11'
    GROUP BY t1.`date_key`
) AS I
ON I.`date_key`=DATE_ADD(J.`date_key`, INTERVAL 7 DAY);

请注意底部应用的日偏移量。这会告诉SQL将每个转换日期与7天前的开始日期合并。

您想除以什么?在这一天之前的七天的计数,考虑提供适当的DDL(和/或SqLFIDLE)与期望的结果一起,SETI确实考虑加入,然后逐个提取数字,但是无法计算出如何在过去的7天加入日期到另一个日期。我将试用你的方法,看看是否有效。非常感谢。