我需要从我们的票务系统中提取一组非常具体的结果。首先,有效的部分......这个查询成功地抓取了一组客户的所有新票和开票。
SELECT COUNT(tickets.ticketid)
FROM tickets, mastergroups AS groups, clients
WHERE clients.clientid = tickets.clientid
AND clients.name = groups.name
AND groups.fullname LIKE 'GROUP NAME%'
AND (tickets.status = 1 or tickets.status = 2);
然而,下一部分一直在踢我的屁股。以下是我需要提取的相关表格信息。
table:ticketdata
ticketid int
datatype int
ticketdatadate timestamp
表:门票
ticketid int (corresponds with ticketid above)
clientid int (corresponds with clientid in the above query)
上述查询中列出了另外两个表,但它们仅与客户端分组有关。如果您需要有关的信息,我会提供,但使用门票是我遇到麻烦的地方。
对于此查询返回的每个票证,我需要找出最近的活动是什么,最终查询需要返回一个等于特定数据类型的数字。 (数据类型以数字形式记录在数据库中,相关的数据类型为2.)换句话说,如果3个故障单上的最新数据类型为2,而其他4个故障单上的最新数据类型为1,则需要返回3。 / p>
过去我只会查询最初的故障单列表,然后使用PHP构建单独的查询以获得我需要的结果。不幸的是(无论如何),如果要这样做,它需要是一个纯粹的MySQL实现。我并不是MySQL的新手,但我也从未真正需要比上述查询更先进的东西,所以请保持温和。我查看了有关JOIN子句的文档和示例,但到目前为止没有点击任何内容。哎呀,我甚至不确定JOIN是我需要的......所以我呼吁别人 - 你有什么例子或建议可以给这里吗?这甚至可以用一个SQL语句吗?
提前感谢您提供任何帮助!
编辑: 好的,试图澄清......对不起,我是这些部分的新手。
“门票”表是所有门票的主记录。每个票证ID只会有一条记录。
一个例子;我为格式化道歉:
TicketID ClientID ProjectID ComputerID Status Subject Time Priority UserID DueDate StartedDate ContactDate UpdateDate RequestorEmail CCEmail Level Category LocationID ExternalID MonitorId GroupId MobileDeviceId GUID DeviceID
79924 11 0 15648 1 subject (redacted) 0 14 0 2014-12-14 07:37:10 2014-12-15 07:37:10 2014-12-15 07:45:02 2014-12-15 07:44:02 email@address username 1 5 0 0 0 0 0 0
另一方面,“ticketdata”表包含故障单中所有活动的历史记录。因此,它可以具有与每个票证ID相关联的多个记录。事实上,我认为它必须至少有两条记录,因为首次打开故障单时会生成一条记录,而故障单关闭时会产生另一条记录。任何客户通信,文档附件,执行的工作等也将在该表中生成新记录。每条记录都有一个与其关联的日期,用于创建该记录的时间。
TicketDataID TicketID DataType Data Attachment Address UserID TicketDataDate
363831 79924 1 Message associated with ticket request (redacted) email@address username 0 2014-12-15 07:37:10
363835 79924 22 Second message associated with ticket request (redacted) user 0 2014-12-15 07:44:02
所以,说到这里,我需要一些独特的门票。需要包含ticket表,因为它包含对我需要的客户端ID的引用。但是,ticketdata表包含我需要绘制的日期时间值,但前提是给定故障单的最新记录的DataType等于2.
希望我不仅让水更加泥泞。