2 つのサブドメインにまたがってミラーリングされている Web サイトがあります。そのため、両方に個別の分析データセットがあります。次のテーブルがあります。
|------------------------------|
| table_a |
|------------------------------|
| url | mod_date |
|------------------------------|
| /foo/index.html | 2009-10-24 |
| /bar/index.php | 2010-01-04 |
| /foo/bar.html | 2009-01-04 |
|------------------------------|
|-----------------------------------------|
| table_b |
|-----------------------------------------|
| url | views | access_date |
|-----------------------------------------|
| /foo/index.html | 35000 | 2009-12-01 |
| /foo/index.html | 20000 | 2010-02-01 |
| /bar/index.php | 35000 | 2010-01-01 |
| /bar/index.php | 15000 | 2011-01-01 |
|-----------------------------------------|
|-----------------------------------------|
| table_c |
|-----------------------------------------|
| url | views | access_date |
|-----------------------------------------|
| /foo/index.html | 35000 | 2009-10-01 |
| /foo/bar.html | 10000 | 2011-05-01 |
| /bar/index.php | 35000 | 2011-08-01 |
| /bar/index.php | 15000 | 2012-04-01 |
|-----------------------------------------|
次のクエリがあります。
SELECT
a.url
,DATE_FORMAT(a.mod_date, '%d/%m/%Y') AS 'mod_date'
,DATE_FORMAT(MIN(b.access_date), '%d/%m/%Y') AS 'first_date'
,DATE_FORMAT(MAX(b.access_date), '%d/%m/%Y') AS 'last_date'
,SUM(ifnull(b.pages,0)) + SUM(ifnull(c.pages,0)) AS 'page_views'
,DATEDIFF(MAX(b.access_date),MIN(b.access_date)) AS 'days'
,ROUND(SUM(b.pages) / (DATEDIFF(MAX(b.access_date),MIN(b.access_date)) / 30.44)) AS 'b_mean_monthly_hits'
,ROUND(SUM(c.pages) / (DATEDIFF(MAX(c.access_date),MIN(c.access_date)) / 30.44)) AS 'a_mean_monthly_hits'
FROM
tabl_a a
LEFT JOIN
table_b b ON b.url = a.url
LEFT JOIN
table_c c ON c.url = a.url
GROUP BY a.url
HAVING ROUND(SUM(b.pages) / (DATEDIFF(MAX(b.access_date),MIN(b.access_date)) / 30.44)) < 5
AND ROUND(SUM(c.pages) / (DATEDIFF(MAX(c.access_date),MIN(c.access_date)) / 30.44)) < 5
;
私が探している結果は次のとおりです。
|------------------------------------------------------------------------------------------|
| results |
|------------------------------------------------------------------------------------------|
| url | mod_date | first_date | last_date | page_views | avg_monthly_hits |
|------------------------------------------------------------------------------------------|
| /foo/index.html | 2009-10-24 | 2009-10-01 | 2010-02-01 | 90000 | 22273 |
| /bar/index.php | 2010-01-04 | 2010-01-01 | 2012-04-01 | 85000 | 3275 |
| /foo/bar.html | 2009-01-04 | 2011-05-01 | 2011-06-01 | 10000 | 9819 |
|------------------------------------------------------------------------------------------|
ここで、 'avg_monthly_hits'は、b.viewsとc.views ( 'page_views'として) の合計を、 table_bまたはtable_cからの最も古い access_date と最も新しいaccess_dateの間の日数 (月の取得方法がわからない) で割ったものです。 30.44 (1 か月の平均日数)。
私は自分自身を完全に説明したことを願っています。:)