繁体   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