2011-10-25 81 views
2

我有一個查詢問題。我有一張代理人的表格,可以做些事情。我跟蹤他們在事件表中所做的事情。我想讓我的代理人忙但不太忙,所以我需要一個查詢,它會返回一組代理人,這些代理人在過去的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語句?

回答

0

你可以試試:

SELECT agent.agentid 
    FROM agent 
INNER JOIN (SELECT count(eventid) events, agentid 
       FROM event 
       WHERE timestamp BETWEEN /* (now - 24 hours) */ AND /* now */ -- adapt this 
       GROUP BY agentid 
      ) last_24_hours 
    ON last_24_hours.agentid = agent.agentid 
INNER JOIN (SELECT count(eventid) events, agentid 
       FROM event 
       WHERE timestamp BETWEEN /* (now - 10 minutes) */ AND /* now */ -- adapt this 
       GROUP BY agentid 
      ) last_10_mins 
    ON last_10_mins.agentid = agent.agentid 
WHERE last_24_hours.events < 400 
    AND last_10_mins.events < 10 
+0

感謝我給它一個嘗試,報到! – vaene

+0

非常感謝您的查詢。我只是從修改中學到更多東西。我使用您提供的查詢作爲我的腳本的新查詢的基礎,它運行良好一段時間,然後停止。我認爲問題可能在於代理商名單很長​​,特別是在活動開始時,並非所有代理商都有事件歸因於他們。我將如何獲得尚未做任何事的代理商?我曾嘗試將它們作爲「測試」事件添加到事件表中,以查看它們是否會以這種方式拾取,但目前還沒有運氣。 – vaene