現在、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)
助けてくれてありがとう!