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