我已经在这里阅读了一些内容,还使用 Google 找到了我的问题的答案,但我没有找到对我有帮助的东西。我希望有人能给我一个问题的答案。
我确实有一个数据库,其中有一个名为“tickets”的表。现在,如果用户创建了一张新票,则会在数据库中创建一个条目。如果管理员现在给出答案,将在表中创建一个新行,具有相同的“ticketnumber”。这看起来像这里的屏幕截图:
第一行是新创建的工单,第二行是管理员的回答!现在我需要一个查询来获取以下信息: 管理员的响应时间!我需要知道 stamp_closed 和 stamp_opened 之间的差异有多长,但响应时间必须来自管理员,这是我的问题,因为在管理员的行中未记录 stamp_opened。
如何创建 SELECT 查询以获取: 来自管理员的 pers_id,来自管理员的 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!
希望有人能帮帮我!
提前致谢!
最佳答案
我不确定我是否完全理解这里的问题,但要回答这个具体问题:
How can I create SELECT-query to get: pers_id from Admin, stamp_opened from Admin and stamp_closed from User?
您需要使用 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 中)以唯一区分用户和管理员。
希望这有帮助!!!
关于mysql - SQL 查询 - 从具有相同 ID 的多行中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703776/