0
我正在研究一個Informix查詢,它將提供1)給我一個呼叫中心代理列表和2)給我他們最近的狀態。我有一個查詢可以完成我所需要的任何事情;Informix子查詢 - 如何正確執行它們
select b.resourcename, b.extension, a.eventtype
from agentstatedetail as a, resource as b, team as c
where date (eventdatetime) = TODAY
and (a.agentid = b.resourceid)
and (b.assignedteamid = c.teamid)
and (c.teamname like 'Team Name %')
group by b.resourcename, b.extension, a.eventtype
order by resourcename asc
然而,這會給我的「事件類型」(事件類型顯示了美國代理人是在給定時間)的完整記錄。我試圖只拉最近的狀態。所以,我相信我需要對這個主查詢做一個子查詢,聲明類似於「如果主查詢的輸出在這個子查詢中找到,那麼保留它」。子查詢看起來像這樣;
select a.agentid, b.resourcename, c.teamname, max(a.eventdatetime)
from agentstatedetail as a, resource as b, team as c
where date (eventdatetime) = TODAY
and a.agentid = b.resourceid
and b.assignedteamid = c.teamid
and c.teamname like 'Team Name %'
group by a.agentid, b.resourcename, c.teamname
這個子查詢本身幾乎是我需要的所有東西,但它沒有事件類型。這個查詢如何工作?
這是我通常寫入子查詢但不能在Informix中工作的格式;
select m.agentid, m.resourcename, m.teamname, a2.eventtype
from (
select a.agentid,b.resourcename,c.teamname,max(a.eventdatetime) as maxtdate
from agentstatedetail as a
inner join resource as b on a.agentid = b.resourceid
inner join team as c on b.assignedteamid = c.teamid
where date (eventdatetime) = TODAY
and c.teamname like 'Team Name %'
group by a.agentid, b.resourcename, c.teamname
) m
inner join agentstatedetail a2
on a2.agentid = m.agentid and a2.eventdatetime = m.maxtdate
我對你想要的列有點糊塗:
select a.agentid, b.resourcename, c.teamname, max(a.eventdatetime) as eventdatetime, a.eventtype from agentstatedetail as a, resource as b, team as c where date(eventdatetime) = TODAY and a.agentid=b.resourceid and b.assignedteamid=c.teamid and c.teamname like 'ITS %' and where a.eventdatetime in (select a.agentid, b.resourcename, c.teamname, max(a.eventdatetime) from agentstatedetail as a, resource as b, team as c where date(eventdatetime) = TODAY and a.agentid=b.resourceid and b.assignedteamid=c.teamid and c.teamname like 'Team Name %' group by a.agentid, b.resourcename, c.teamname) group by a.agentid, b.resourcename, c.teamname, a.eventtype order by max(a.eventdatetime) desc
謝謝菲利普。儘管我不是用來做內部連接的,但這個說法很有效。我喜歡使用子查詢來完成全連接,例如,「where eventtype not in(select ...)」。我試圖寫它,但Informix將它踢回去了。你知道如果可能的話,它是如何寫成的? – Kimomaru
你當然習慣於做內部連接,而不是顯式的方式。 :)。在你原來的查詢中,你有:'...從agentstatedetail作爲一個資源作爲b,團隊作爲c 其中a.agentid = b.resourceid 和b.assignedteamid = c.teamid ...'。這些是使用「舊時尚」方式的INNER JOIN。請參閱[這裏](http://stackoverflow.com/q/1018822/1385896)以獲得更好的解釋。 –
有趣。我會研究這一點。謝謝,Filipe。 – Kimomaru