2013-10-15 6 views
3

나는 analytics_metrics 테이블이 하나 있습니다. 나는 지난 x 일간의 방문자 통계 및 페이지 뷰 통계에서 카운트를 얻으려고합니다. 기간이 변경 될 수 있습니다. 나는이 같은 출력을 얻을 찾고Mysql 가입 날짜 사이에

id metrics    count date 
67 visitorsStatistics 15779 2013-10-10 
69 pageviewsStatistics 282141 2013-10-10 
90 visitorsStatistics 14588 2013-10-11 
92 pageviewsStatistics 265042 2013-10-11 
108 pageviewsStatistics 278523 2013-10-12 
106 visitorsStatistics 15015 2013-10-12 
122 visitorsStatistics 16474 2013-10-13 
124 pageviewsStatistics 312752 2013-10-13 
138 visitorsStatistics 16829 2013-10-14 
140 pageviewsStatistics 320614 2013-10-14 
85 pageviewsStatistics 67976 2013-10-15 
83 visitorsStatistics 5452 2013-10-15 

: 내가 4 시간 이상 다른 쿼리를 tryed 한

visitorsStatistics pageviewsStatistics 
15779    282141 
14588    265042 
15015    278523 
16474    312752 
16829    320614 
5452     67976 

지금 난 그냥 캔트 :-(을 할 수있는 올바른 방법을 찾을 수가 . 내가 하루 동안이 쿼리를 사용하는 경우

SET @fromDate = '2013-10-10'; 
set @tillDate = '2013-10-11'; 

SELECT 
    * 
    /* ga_visits.count as visits, 
    ga_pageviews.count as pageviews 
*/ 
FROM analytics_metrics as ga_visits 
    LEFT JOIN analytics_metrics as ga_pageviews on (ga_pageviews.date BETWEEN @fromDate AND @tillDate AND ga_pageviews.metrics = 'pageviewsStatistics') 
    WHERE ga_visits.date BETWEEN @fromDate AND @tillDate AND ga_visits.metrics = 'visitsStatistics' 

가 잘 작동하지만 :

여기

내가 지금까지 무엇을 가지고 있습니다 날짜 범위

누군가가 도움을 주길 바랍니다.

답변

1

내가 정확하게, 당신처럼, 하나의 날짜에서 쌍 행을 결합하려는 것을 가지고있는 경우이 같은이 fiddle

1

이 밖으로 시도 사전에 감사합니다 :

SELECT 
    sum(if(metrics = 'visitorsStatistics', `count`, 0)) visitorsStatistics, 
    sum(if(metrics = 'pageviewsStatistics', `count`, 0)) pageviewsStatistics 
FROM analytics_metrics am 
WHERE <WHATEVER YOU NEED> 
GROUP BY `date` 

바이올린 here합니다.

+0

이 쿼리의 설명이다 시도해보십시오 http://en.wikibooks.org/wiki/MySQL/Pivot_table –

0

확인 봐요

SELECT 
    l.count AS visitorsStatistics, 
    r.count AS pageviewsStatistics 
FROM 
    (SELECT * FROM analytics_metrics WHERE metrics='visitorsStatistics') AS l 
    LEFT JOIN 
    (SELECT * FROM analytics_metrics WHERE metrics='pageviewsStatistics') AS r 
    ON l.date=r.date 
WHERE 
    l.date BETWEEN @fromDate AND @tillDate 

.

SELECT if(metrics='visitorsStatistics',count) AS visitorsStatistics,if(metrics='pageviewsStatistics',count) AS pageviewsStatistics 
    FROM metrics_table 
    WHERE date BETWEEN '2013-10-10' AND '2013-10-15' 
    GROUP BY date 
0

여기

SELECT 
    * 
    /* ga_visits.count as visits, 
    ga_pageviews.count as pageviews 
*/ 
FROM analytics_metrics as ga_visits 
    LEFT JOIN analytics_metrics as ga_pageviews on (ga_pageviews.date BETWEEN @fromDate AND @tillDate AND ga_pageviews.metrics = 'pageviewsStatistics') 
    WHERE ga_visits.date BETWEEN DATE_ADD(fromDate, INTERVAL 1 DAY) and DATE_SUB(tillDate, INTERVAL 1 DAY) AND ga_visits.metrics = 'visitsStatistics'