簡體   English   中英

MySQL子查詢從另一個表中提取數據

[英]MySql subquerying to pull data from another table

我目前正在使用phpMyAdmin支持MySql 5.0。

我有以下兩個表:

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. 

對於“按人口統計的喜歡”表:每個客戶列出每月的所有天; 新的月份開始時,可​​能會列出一組新的人口統計信息,也可能未列出與上個月完全相同的統計信息。 這是因為數據是從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

子查詢的使用使我感到困惑。 以下是我一直試圖修復的(不正確)代碼。 問題在於,這只是提取第一個客戶(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)

非常感謝你的幫助!

僅使用原始的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 |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM