[英]SQL Query - Get results from multiple rows with same ID
我已經在這里閱讀了一些內容,還使用Google來找到問題的答案,但沒有找到對我有幫助的東西。 我希望有人能回答我的問題。
我的數據庫確實有一個名為“票證”的表格。 現在,如果用戶創建新票證,則將進入數據庫。 如果管理員現在給出答案,則會在表中創建一個具有相同“票號”的新行。 這看起來像此屏幕截圖:
第一行是新創建的票證,第二行是管理員的答案! 現在,我需要查詢以獲取以下信息:管理員的響應時間! 我需要知道stamp_closed和stamp_opened之間的區別有多長時間,但是響應時間必須來自管理員,這是我的問題,因為在admin行中,stamp_opened未被記錄。
如何創建SELECT查詢以獲取:從admin獲得pers_id,從admin獲得stamp_opened,從用戶獲得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
問題是我得到了用戶的pers_id和用戶的stamp_closed,而不是管理員的pers_id和管理員的stamp_closed!
希望有人可以幫助我!
提前致謝!
我不確定我是否完全理解這里的問題,但是要回答這個特定問題:
如何創建SELECT查詢以獲取:從admin獲得pers_id,從admin獲得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
您可以將WHERE
子句替換為您擁有的任何業務規則(在SQL中),以唯一地區分用戶和管理員。
希望這可以幫助!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.