MySQL统计两个具有日期范围的表

MySQL统计两个具有日期范围的表,mysql,sql,Mysql,Sql,我有两个表,每个表从第一次加入成员时就具有相同的ID 一旦成员获得批准,他/她也将因某种原因和条件被拒绝 查询结果需要按日期范围排序,然后根据所选ID中的每个日期计算批准总数和拒绝总数 在这种情况下,我选择了加入id 325。 表1核准: join_id approved_date 325 2016-03-20 326 2016-03-20 326 2016-03-20 325 201

我有两个表,每个表从第一次加入成员时就具有相同的ID

一旦成员获得批准,他/她也将因某种原因和条件被拒绝

查询结果需要按日期范围排序,然后根据所选ID中的每个日期计算批准总数和拒绝总数

在这种情况下,我选择了加入id 325。

表1核准:

join_id         approved_date
325             2016-03-20
326             2016-03-20
326             2016-03-20
325             2016-03-21
326             2016-03-21
325             2016-03-21
325             2016-03-21
327             2016-03-21
325             2016-03-22
327             2016-03-22
325             2016-03-22
表格拒绝:

join_id         rejected_date
325             2016-03-20
325             2016-03-20
326             2016-03-20
325             2016-03-21
327             2016-03-21
325             2016-03-22
327             2016-03-22
325             2016-03-22
这是我尝试过的:

SELECT
approved_date,
COUNT(join_id) AS join_id
FROM approves
WHERE join_id = 325
AND approved_date BETWEEN '2016-03-19' AND '2016-03-26' + INTERVAL 1 DAY
GROUP BY DATE_FORMAT(approved_date, '%Y-%m-%d');

SELECT
rejected_date,
COUNT(join_id) AS join_id
FROM rejects
WHERE join_id = 325
AND rejected_date BETWEEN '2016-03-19' AND '2016-03-26' + INTERVAL 1 DAY
GROUP BY DATE_FORMAT(rejected_date, '%Y-%m-%d');
join_id的结果325我期望:

date_time|approves|rejected
2016-03-19|0|0
2016-03-20|1|2
2016-03-21|3|1
2016-03-22|2|2
2016-03-23|0|0
2016-03-24|0|0
2016-03-25|0|0
2016-03-26|0|0
可能不是很理想,但我认为最简单。

这里有一种方法:

SELECT d, 
       COALESCE(approved_count, 0) AS approved_count, 
       COALESCE(rejected_count, 0) AS rejected_count
FROM ( 
  SELECT DISTINCT approved_date AS d
  FROM approves

  UNION 

  SELECT DISTINCT rejected_date
  FROM rejects) AS t1
LEFT JOIN (
   SELECT approved_date, COUNT(*) AS approved_count
   FROM approves
   GROUP BY approved_date
) AS t2 ON t1.d = t2.approved_date
LEFT JOIN (
   SELECT rejected_date, COUNT(*) AS rejected_count
   FROM rejects
   GROUP BY rejected_date
) AS t3 ON t1.d = t3.rejected_date
ORDER BY d
也试试这个

select t1.join_id, t1.counting as approved, t2.counting as rejected from
(
select join_id, count(*) as counting from approves group by join_id
) as t1 inner join 
(
select join_id, count(*) as counting from rejects group by join_id
) as t2 on t1.join_id=t2.join_id

让我们知道……你有什么tried@Jordan我已经把我刚试过的代码放进去了。请复习。我想这是更接近的。但还是没有我想的那样有结果。但是谢谢你。
select t1.join_id, t1.counting as approved, t2.counting as rejected from
(
select join_id, count(*) as counting from approves group by join_id
) as t1 inner join 
(
select join_id, count(*) as counting from rejects group by join_id
) as t2 on t1.join_id=t2.join_id