2016-02-29 146 views
1

我在此處閱讀了一些內容,還使用Google查找了我的問題的答案,但沒有找到可幫助我的內容。我希望有人能給我一個我的問題的答案。SQL查詢 - 從具有相同ID的多行獲取結果

我有一個名爲「門票」的表的數據庫。現在,如果用戶創建新票據,則會創建數據庫條目。如果管理員現在給出答案,則將創建表中的新行,並具有相同的「ticketnumber」。這看起來像這裏的截圖: enter image description here

第一行是一個新創建的票,第二行是一個管理員的答案!現在我需要一個查詢來獲取以下信息: 管理員的響應時間!我需要知道stamp_closed和stamp_opened之間的區別有多長,但響應時間必須來自管理員,這是我的問題,因爲在管理員行中,stamp_opened不會被記錄。

如何創建SELECT查詢以獲取: 來自Admin的pers_id,來自Admin的stamp_opened和來自User的stamp_closed?

這是我試過到目前爲止:

SELECT ticket.pers_id, ticket.stamp_created as starttime, ticket.stamp_closed as endtime, count(ticket.pers_id) as cnt, user.firstname, user.lastname, (sum(ticket.stamp_closed)-sum(ticket.stamp_created)) as average 
FROM tickets ticket 
inner join userlist user on ticket.pers_id=user.pers_id 
where ticket.ticketnumber=54094 

問題是,我得到的user's pers_id和user's stamp_closed而不是admin's pers_id和admin's stamp_closed!

希望有人能幫助我!

在此先感謝!

+2

你知不知道你可以自己加入一張表...... '從票t內部加入票tAtwer on t.ticketnubmer = tanswer.ticketnumber和t.stamp_reply = 0和tansewr.stamp_reply <> 0' –

+0

感謝您的回答。是的我知道,但仍然沒有任何查詢,它給了我正確的信息,我需要和上面在我的問題中描述:( –

+0

你是否需要從stamp_opened(row2)或stamp_closed(row1)從stamp_created(row1)減去stamp_opened(row1) )? –

回答

2

我不知道我完全瞭解這裏的問題,而是要回答這個具體問題:

如何創建SELECT查詢來獲得:pers_id從管理,從管理stamp_opened 和stamp_closed用戶?

您需要使用自連接,正如Conrad在他上面的評論中正確提到的那樣。這裏有一個方法,你可以做到這一點:

SELECT   tAdmin.pers_id, 
       tAdmin.stamp_opened AS starttime, 
       tUser.stamp_closed AS endtime, 

FROM   tickets tUser 
INNER JOIN  tickets tAdmin ON tUser.ticketnumber = tAdmin.ticketNumber 
WHERE   tAdmin.stamp_created = 0 
AND    tUser.stamp_created <> 0 
AND    tUser.ticketnumber = 54094 

上述查詢將只取你爲這個特定的准考證號(54094)的結果。如果你希望你的SQL查詢來獲取所有票號的結果,剛剛從WHERE條款刪除最後一個條件:

SELECT   tAdmin.pers_id, 
       tAdmin.stamp_opened AS starttime, 
       tUser.stamp_closed AS endtime, 

FROM   tickets tUser 
INNER JOIN  tickets tAdmin ON tUser.ticketnumber = tAdmin.ticketNumber 
WHERE   tAdmin.stamp_created = 0 
AND    tUser.stamp_created <> 0 

最後,我看你正在努力尋找的響應時間取票。也就是說,票證創建時間和結束時間之間的差異。你可以這樣做,如下:

SELECT   tAdmin.pers_id, 
       tAdmin.stamp_opened AS starttime, 
       tUser.stamp_closed AS endtime, 
       (tUser.stamp_closed - tUser.stamp_created) AS 'Current request Service Response Time' 
FROM   tickets tUser 
INNER JOIN  tickets tAdmin ON tUser.ticketnumber = tAdmin.ticketNumber 
WHERE   tAdmin.stamp_created = 0 
AND    tUser.stamp_created <> 0 
AND    tUser.ticketnumber = 54094 

再一次,請注意,這僅用於當前記錄。如果與當前數據一起想的所有記錄的平均值,你可以這樣做:

SELECT   tAdmin.pers_id, 
       tAdmin.stamp_opened as starttime, 
       tUser.stamp_closed as endtime, 
       (tUser.stamp_closed - tUser.stamp_created) AS 'Current request Service Response Time', 
       (SELECT   (SUM(stamp_closed) - SUM(stamp_created)) 
       FROM   Tickets) AS 'Average Service Response Time' 
FROM   tickets tUser 
INNER JOIN  tickets tAdmin ON tUser.ticketnumber = tAdmin.ticketNumber 
WHERE   tAdmin.stamp_created = 0 
AND    tUser.stamp_created <> 0 
AND    tUser.ticketnumber = 54094 

可以代替你所擁有的任何業務規則(在你的SQL)的WHERE子句用戶之間的唯一區別和管理員。

希望這有助於!