簡體   English   中英

SQL查詢-從具有相同ID的多行獲取結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM