2016-04-11 7 views
1

Ich habe zwei Tabellen mit jedem der Tabelle mit der gleichen ID von der ersten Zeit der Mitglied Join.MySQL zählt zwei Tabellen mit Datumsbereichen

Sobald das Mitglied genehmigt wurde, wird er/sie auch aus einem anderen Grund abgelehnt.

Das Abfrageergebnis muss nach Datumsbereichen sortiert werden. Dann werden die Gesamtgenehmigungen und Gesamtausschüsse basierend auf jedem Datum der ausgewählten ID gezählt.

In diesem Fall I 325.

Tabelle join_id für ausgewählt haben genehmigt:

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 

Tabelle lehnt:

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 

Dies habe ich versucht:

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'); 

Treffer für join_id ich erwartet hatte:

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 
+0

lassen Sie uns wissen ..was Sie –

+0

@Jordan versucht haben, habe ich den Code habe ich gerade versucht. Lesen Sie bitte. – cocksparrer

Antwort

1
select events.join_id, events.date, sum(approve) as approves, sum(reject) as rejects 
    from (
     select join_id, approved_date as date, 1 as approve, 0 as reject from approves 
     union 
     select join_id, rejected_date as date, 0 as approve, 1 as reject from rejects 
    ) as events 
    group by events.join_id, events.date 
where events.join_id = ? -- Here you can have more complex condition 

nicht sehr optimal sein, aber einfachste denke ich.

0

Hier ist eine Art und Weise:

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 
+0

das ist näher denke ich. Aber immer noch nicht so, wie ich denke. Aber danke. – cocksparrer

1

Try this zu

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 
+0

wo ist Datum? –