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

标签 mysql sql

我已经在这里阅读了一些内容,还使用 ​​Google 找到了我的问题的答案,但我没有找到对我有帮助的东西。我希望有人能给我一个问题的答案。

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

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

如何创建 SELECT 查询以获取: 来自管理员的 pers_id,来自管理员的 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!

希望有人能帮帮我!

提前致谢!

最佳答案

我不确定我是否完全理解这里的问题,但要回答这个具体问题:

How can I create SELECT-query to get: pers_id from Admin, stamp_opened from Admin and stamp_closed from User?

您需要使用 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 中)以唯一区分用户和管理员。

希望这有帮助!!!

关于mysql - SQL 查询 - 从具有相同 ID 的多行中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703776/

相关文章:

Mysql将列数据类型从整数更改为 double 而不丢失旧数据

sql - 是否可以在 Visual Studio 2010 中为 Microsoft SQL Server 开发数据库应用程序,然后改用 MySQL?

php - 删除具有两个特定列重复项的重复行

mysql - MySql中子查询的问题

sql - 推荐一个很好的SQL Server临时表教程

sql - 获取SQL中单词的几个字母

php - 仅将一个表从一个数据库导入/导出到另一个数据库 [通过 PHP]

php - 根据sql语句中的其他字段选择正确的字段

sql - 在两个条件上使用左连接的 Access-SQL 查询中缺少值

SQL Server : select value, 在分隔符上拆分,然后更新两列