2013-10-15 68 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 

我期待得到這樣的輸出:

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

我已經tryed不同的查詢,以4個多小時,現在我只是不能似乎發現這樣做:-(的正確方法。

這是我走到這一步:

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'