2016-05-05 14 views
5

Tôi có hai bảng:Chọn từ hai bảng với nhóm theo ngày

Bảng t1:

id | date_click 
1 | 2016-02-31 17:17:23 
2 | 2016-03-31 12:11:21 
3 | 2016-03-31 13:13:23 

Vì vậy, từ bảng này tôi muốn để có được số lĩnh vực Id cho mỗi ngày.

Đối với điều này tôi sử dụng truy vấn tiếp theo:

SELECT date_format(date_click, '%Y-%m-%d') as date_click_event 
    , COUNT(id) as count_click 
    FROM t1 
GROUP 
    BY date_click_event 
ORDER 
    BY date_click_event DESC; 

Đó là công việc tốt.

Vì vậy, bảng tiếp theo là t2.

id | count | date_sent 
1 | 33 | 2016-02-31 11:12:23 
2 | 22 | 2016-03-31 14:11:22 
3 | 11 | 2016-03-31 13:12:13 

Để chọn dữ liệu theo ngày từ bảng này tôi sử dụng truy vấn tiếp theo:

SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push 
    , SUM(count) as count_sent 
    FROM t2 
GROUP 
    BY date_sent_push 
ORDER 
    BY date_sent_push DESC 
LIMIT 100; 

Nó cũng làm việc tốt. Vì vậy, mục đích của tôi là kết hợp hai truy vấn này thành một SELECT mà tiếp theo tôi có thể viết trong một bảng php với số lượng Id theo ngày từ bảng t1 và với số trường count từ bảng t2 theo ngày.

Khi tôi cố gắng truy vấn tiếp theo:

SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push 
    , SUM(t2.count) as count_sent 
    , COUNT(t1.id) as count_click 
    FROM t2 
    , t1 
WHERE date_format(t2.date_sent, '%Y-%m-%d') = date_format(t1.date_click, '%Y-%m-%d') 
GROUP 
    BY date_sent_push 
ORDER 
    BY date_sent_push 
    DESC 
LIMIT 100; 

Nó không làm việc. Tôi đã làm gì sai?

+0

Ý anh là gì với "Nó không làm việc" ..? lỗi ? kết quả sai? .. hiển thị kết quả mong đợi. – scaisEdge

Trả lời

3

Trước tiên, bạn nên UNION những kết quả này và sau đó nhóm theo ngày và chọn trường tổng hợp. Ngoài ra, bạn có thể tham gia các truy vấn này nhưng nó có thể là một vấn đề nếu vài ngày bỏ lỡ một trong hai bảng:

SELECT date_sent_push, 
     MAX(count_click) as count_click, 
     MAX(count_sent) as count_sent 
FROM 
(SELECT date_format(date_click, '%Y-%m-%d') as date_sent_push 
    , COUNT(id) as count_click 
    , NULL as count_sent 
    FROM t1 
    GROUP BY date_sent_push 
    UNION ALL 
    SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push 
    , NULL as count_click 
    , SUM(count) as count_sent 
    FROM t2 
    GROUP 
    BY date_sent_push 
) as t3 
GROUP BY date_sent_push 

SQL fiddle demo

0
use this code 

(SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push, SUM(count) as count_sent FROM t2 GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100) 
UNION 
(SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push, SUM(t2.count) as count_sent, COUNT(t1.id) as count_click FROM t2, t1 WHERE date_format(t2.date_sent, '%Y-%m-%d')=date_format(t1.date_click, '%Y-%m-%d') GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100) 
+0

Đó là lỗi trả về: # 1222 - Các câu lệnh SELECT được sử dụng có số cột khác nhau, nhưng số ngày trong hai bảng bằng – user3499878

+0

Liên minh yêu cầu bằng không. cột Vì vậy, không. của cột từ truy vấn chọn đầu tiên phải bằng với số không. của cột từ truy vấn thứ 2. –

Các vấn đề liên quan