SQL查询 - 从具有相同ID的多行获取结果

问题描述:

我在此处阅读了一些内容,还使用Google查找了我的问题的答案,但没有找到可帮助我的内容。我希望有人能给我一个我的问题的答案。SQL查询 - 从具有相同ID的多行获取结果

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

第一行是一个新创建的票,第二行是一个管理员的答案!现在我需要一个查询来获取以下信息: 管理员的响应时间!我需要知道stamp_closed和stamp_opened之间的区别有多长,但响应时间必须来自管理员,这是我的问题,因为在管理员行中,stamp_opened不会被记录。

如何创建SELECT查询以获取: 来自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 

问题是,我得到的user's pers_id和user's stamp_closed而不是admin's pers_id和admin's stamp_closed!

希望有人能帮助我!

在此先感谢!

+2

你知不知道你可以自己加入一张表...... '从票t内部加入票tAtwer on t.ticketnubmer = tanswer.ticketnumber和t.stamp_reply = 0和tansewr.stamp_reply 0' –

+0

感谢您的回答。是的我知道,但仍然没有任何查询,它给了我正确的信息,我需要和上面在我的问题中描述:( –

+0

你是否需要从stamp_opened(row2)或stamp_closed(row1)从stamp_created(row1)减去stamp_opened(row1) )? –

我不知道我完全了解这里的问题,而是要回答这个具体问题:

如何创建SELECT查询来获得:pers_id从管理,从管理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 

可以代替你所拥有的任何业务规则(在你的SQL)的WHERE子句用户之间的唯一区别和管理员。

希望这有助于!