我已经在这里阅读了一些内容,并使用谷歌找到了我的问题的答案,但我找不到有助于我的东西。我希望有人可以回答我的问题。
我的数据库中有一个名为“ticket”的表。现在,如果用户创建新票证,则将创建数据库条目。如果管理员现在给出答案,则将创建表中的新行,并使用相同的“ticketnumber”。这看起来像这个截图:
第一行是新创建的票证,第二行是管理员的答案!现在我需要一个查询来获取以下信息: 管理员的响应时间!我需要知道stamp_closed和stamp_opened之间的差异有多长,但响应时间必须来自admin,这是我的问题,因为在admin的行中不会记录stamp_opened。
如何创建SELECT-query以获取: 来自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
问题是我得到了用户的pers_id和用户的stamp_closed而不是admin的pers_id和admin的stamp_closed!
希望有人可以帮助我!
提前致谢!
答案 0 :(得分:2)
我不确定我是否完全理解这个问题,但要回答这个具体问题:
如何创建SELECT-query以获取:pers_id来自Admin,stamp_opened 来自Admin和来自用户的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中的任何业务规则,以唯一地区分用户和管理员。
希望这有帮助!!!