1

現在、MySql 5.0 をサポートする phpMyAdmin を使用しています。

次の2つのテーブルがあります。

Master Facebook Insights
------------------------

Client ID  Client Name  Date        Top Likes By Gender
---------  -----------  ------      --------------------
1          Client1      2012-01-01  
1          Client1      2012-02-01
2          Client2      2012-01-01
2          Client2      2012-02-01
...etc. (the dates are always the beginning of each month for however many months
& clients exist)

Likes By Demographic
----------------

Date        Demographic1  Demographic2  Demographic3  Client
------      ------------  ------------  ------------  ------
0000-00-00  M.35-44       M.45-54       M.25-34       1
2012-01-01  53            44            28            1
2012-01-02  53            46            29            1
...etc.
0000-00-00  M.18-24       M.35-44       M.25-34       1
2012-02-01  374           221           194           1
2012-02-02  374           222           195           1
...etc.
0000-00-00  F.35-44       F.25-34       M.35-44       2
2012-01-01  194           182           83            2
2012-01-02  194           182           83            2
...etc.
0000-00-00  F.35-44       F.25-34       M.35-44       2
2012-02-01  196           180           83            2
2012-02-02  197           180           83            2
...etc. 

Likes By Demographic テーブルの場合: 各月のすべての日がクライアントごとにリストされます。新しい月が始まると、前の月とまったく同じようにリストされる場合とそうでない場合がある新しい人口統計のセットがあります。これは、人口統計を「いいね」の多い順に並べた CSV からデータがインポートされたためで、通常は月ごとに変化します。これは、個々の人口統計が列ヘッダーではない理由でもあります (一貫性がないため)。

私の問題は次のとおりです。次のように、最初のテーブルの「性別ごとの上位のいいね」列に、各クライアントの月ごとの上位 3 つの人口統計をリストしたいと考えています。

Client ID  Client Name  Date        Top Likes By Gender
---------  -----------  ------      --------------------
1          Client1      2012-01-01  M.35-44, M.45-54, M.25-34 
1          Client1      2012-02-01  M.18-24, M.35-44, M.25-34
2          Client2      2012-01-01  F.35-44, F.25-34, M.35-44
2          Client2      2012-02-01  F.35-44, F.25-34, M.35-44

サブクエリの使用は私を混乱させます。以下は、私が修正しようとしている (間違った) コードです。問題は、最初のクライアントの最初の 3 つの人口統計 (M.35-44、M.45-54、M.25-34) を抽出し、すべてのクライアントと日付の列全体でそれらを繰り返すことです。私は正しい軌道に乗っていますか、それとももっと簡単で正しい方法がありますか?

UPDATE `Master Facebook Insights`
SET `Top Likes By Gender` =
(select * from
(SELECT DISTINCT CONCAT(`Demographic1`,', ',`Demographic2`,', ',`Demographic3`)
FROM `Likes By Demographic` t1
JOIN `Master Facebook Insights` t2
ON t1.`Client` = t2.`Client ID`
WHERE  t1.`Date` = '0000-00-00'
AND t2.`Date` = 

(
SELECT MIN(`Date`)
FROM `Likes By Demographic`
WHERE `Date` > '0000-00-00'
AND `Client` = t2.`Client ID`
GROUP BY `Date`
ORDER BY `Date` ASC
LIMIT 1
)

)inner1 limit 1)

助けてくれてありがとう!

4

1 に答える 1

0

元の Likes_By_Demographic テーブルを使用するだけで、次のことができます。

select
  client_id,
  date,
  concat(demo1,', ',demo2,', ',demo3) `top_likes`
from likes_by_demographic
group by client_id, date
order by client_id, date;

...(疑似データ)が得られます:

| CLIENT_ID |                            DATE |             TOP_LIKES |
-----------------------------------------------------------------------
|         1 |  January, 01 2012 00:00:00-0800 | M.35-44, M.25-34, 195 |
|         1 | February, 01 2012 00:00:00-0800 | M.25-34, M.35-44, 195 |
|         1 |    March, 01 2012 00:00:00-0800 |     M.25-34, 195, 169 |
|         2 |  January, 01 2012 00:00:00-0800 |     F.45-54, 210, 195 |
|         2 | February, 01 2012 00:00:00-0800 |      F.45-54, 210, 75 |
于 2012-06-12T20:35:45.930 に答える