2017-06-14 34 views
0

我在訪問2013年有2個系統日誌表,其中一個被電子郵件欺騙,另一個被用戶ID欺騙。 LOG1如何在訪問2013年將2個表格換成另一個表格?

電子郵件日期時間味精

的log 2

用戶ID日期時間味精

我要統計有多少味精用戶每月發送和保存到一個表user_msg_count

yearmonth用戶ID MSG_COUNT

SELECT format([log1].datetime,"yyyy/mm") AS yearmonth, log1.email, COUNT(log1.msg) AS msg_count INTO user_msg_count 
FROM log1 
GROUP BY FORMAT(log1.datetime,"yyyy/mm", log1.email; 

然後我從users表中獲得用戶ID

用戶

用戶ID電子郵件

UPDATE user_msg_count, users SET user_msg_count.userid = users.userid 
WHERE user_msg_count.email = users.email; 

但我不知道如何將log2加入user_msg_count表。

+0

我不充分認識。用戶在'log2'中有消息。一個用戶在'log1'中也有消息(通過他們的電子郵件)。而'user_msg_count'還是另一個表?該表是如何定義的?什麼是其獨特的關鍵?它是每個用戶一個記錄嗎?你爲什麼連這張桌子?爲什麼只要你想簡單地計算消息就可以冗餘地存儲消息數量? –

+0

同意Thorsten,沒有看到如何證明將此計算保存到表中。如果這些表格都是用於記錄電子郵件的,爲什麼你甚至有兩個表格?這兩個表中是否記錄了相同的消息?如果你計算兩個表並添加這些計數,你不是重複計算?爲什麼用戶標識未保存到Log1中? – June7

+0

log1來自網站只有loged電子郵件和log2來自移動只loged userid,所以我需要結合並統計用戶發送給我們的郵件數量。 – user3009410

回答

0

電子郵件是發件人(用戶)電子郵件還是收件人?

如果用戶電子郵件:

LogUnion查詢:

SELECT Users.UserID, Format([DateSend],"yyyymm") AS YrMo, "L1" AS Source FROM Users INNER JOIN Log1 ON Users.emailAdd = Log1.email 
UNION ALL SELECT UserID, Format([DateSend],"yyyymm"), "L2" FROM Log2; 

TOTALCOUNT查詢:

SELECT LogUnion.UserID, LogUnion.YrMo, Count(*) AS CountMsg 
FROM LogUnion 
GROUP BY LogUnion.UserID, LogUnion.YrMo; 

嵌套的所有功能於一身的查詢:

SELECT LogUnion.UserID, LogUnion.YrMo, Count(*) AS CountOfSource 
FROM (SELECT Users.UserID, Format([DateSend],"yyyymm") AS YrMo, "L1" AS Source FROM Users INNER JOIN Log1 ON Users.emailAdd = Log1.email 
UNION ALL SELECT UserID, Format([DateSend],"yyyymm"), "L2" FROM Log2) AS LogUnion 
GROUP BY LogUnion.UserID, LogUnion.YrMo; 
+0

謝謝,結合在一個表中的味精然後計數,是否有可能在一個查詢中做到這一點?我只想計算味精,最好不要有重複的味精以減少表格大小。 – user3009410

+0

我不認爲表格大小是一個問題。單個表比使用UNION查詢更好。表格中還有其他字段嗎?看修改後的答案。 – June7

+0

這必須是'UNION ALL'。使用'UNION'可以刪除重複項,所以您只能看到*用戶是否發送了消息,而不是多少。 –

相關問題