[英]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.