2011-10-25 17 views
2

私はクエリの問題があります。私は物事を行うエージェントのテーブルを持っています。彼らがイベントテーブルで行うことを追跡します。私はエージェントを忙しく過ごしたくないので忙しくはないので、私は過去10分間に10イベント以上、過去24時間に400イベント以下を行ったエージェントのグループを私に返すクエリが必要です。そして、私は1つが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件を超え、400件を超えるイベントを実行していないエージェントのグループを返すジョインからエージェントのグループを選択する方法です過去24時間私の実際のテーブルはもっと複雑ですが、私は、望みの結果を返すクエリをどのように構造化するかという一般原則を探しています。ヘルプのお時間をありがとうございます!

ブノワのanswereに** UPDATE 建物に私はこの思い付いた:

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は、2番目のテーブルに一致するものがなくても、最初のテーブルcampaign_agentsのすべてを含むべきではありませんか?どういうわけかどこかに入れておけば、後に置く必要がありますか?

答えて

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

関連する問題