SQL查询 - 从具有相同ID

时间:2016-02-29 15:50:31

标签: mysql sql

我已经在这里阅读了一些内容,并使用谷歌找到了我的问题的答案,但我找不到有助于我的东西。我希望有人可以回答我的问题。

我的数据库中有一个名为“ticket”的表。现在,如果用户创建新票证,则将创建数据库条目。如果管理员现在给出答案,则将创建表中的新行,并使用相同的“ticketnumber”。这看起来像这个截图: enter image description here

第一行是新创建的票证,第二行是管理员的答案!现在我需要一个查询来获取以下信息: 管理员的响应时间!我需要知道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!

希望有人可以帮助我!

提前致谢!

1 个答案:

答案 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中的任何业务规则,以唯一地区分用户和管理员。

希望这有帮助!!!