我有一個查詢問題。我有一張代理人的表格,可以做些事情。我跟蹤他們在事件表中所做的事情。我想讓我的代理人忙但不太忙,所以我需要一個查詢,它會返回一組代理人,這些代理人在過去的10分鐘內完成了10個事件,並且在過去24小時內沒有超過400個事件。而從這個池可用的代理,我可以選擇一個給事做MySQL查詢構建
所以我代表表看起來像:
Agent table
AgentID. AgentName
1 Bob
2 Sue
Event Table
Event ID. Agent ID. Event Timestamp
1 2 1319525462
2 1 1319525462
3 2 1319525462
顯然,這些表都只是爲了給該數據庫的形式。我通常需要並且無法弄清楚的是如何從聯合中選擇一組代理,該聯合返回一組代理,這些代理在過去的10分鐘內完成了不超過10個事件,並且在過去10分鐘內完成了不超過400個事件過去24小時。我的實際表格更加複雜,但我只是在尋找一個關於如何構造能夠返回所需結果的查詢的一般原則。預先感謝您的幫助!
**更新 建築上Benoit的的answere我想出了這一點:
SELECT DISTINCT username FROM campaign_agents
LEFT OUTER JOIN (SELECT count(event_index) myevents, field_event_agent_value FROM new_event WHERE field_event_time_value BETWEEN 1320206138 AND 1320292538 GROUP BY field_event_agent_value) last_24_hours
ON last_24_hours.field_event_agent_value = campaign_agents.username
LEFT OUTER JOIN (SELECT count(event_index) myevents, field_event_agent_value FROM new_event WHERE field_event_time_value BETWEEN 1320291938 AND 1320292538 GROUP BY field_event_agent_value) last_10_mins
ON last_10_mins.field_event_agent_value = campaign_agents.username
WHERE last_24_hours.myevents < 550 AND last_10_mins.myevents < 10
不過,這並不讓代理商誰沒有做任何事情的campaign_agents表,因此不在事件表。即使沒有與第二個表格匹配,LEFT OUTER JOIN是否不應包含第一個表格campaign_agents中的所有內容?我需要在哪裏以某種方式將它們包括在內後放置和OR語句?
感謝我給它一個嘗試,報到! – vaene
非常感謝您的查詢。我只是從修改中學到更多東西。我使用您提供的查詢作爲我的腳本的新查詢的基礎,它運行良好一段時間,然後停止。我認爲問題可能在於代理商名單很長,特別是在活動開始時,並非所有代理商都有事件歸因於他們。我將如何獲得尚未做任何事的代理商?我曾嘗試將它們作爲「測試」事件添加到事件表中,以查看它們是否會以這種方式拾取,但目前還沒有運氣。 – vaene