SQLite - 分组超过x

时间:2016-05-15 10:45:41

标签: sql sqlite

我有三张表与软件开发公司的支持票据数据相关,表格的排列方式如下:

Tickets
[PK] 
ID     Ticket_Type  Type                Created         Resolved
s-100  s            Bug                 1434725860524   1463075456304
d-29   d            Deployment          1434724333500   1463665757667
p-50   p            Upgrade             1434722686876   1466575675677
s-25   s            Training Issue      1434723799989   1465675675677

P-ticket_links
[PK]
Pticket    Link
p-50       s-100
p-50       s-102
p-50       d-29

D-ticket_servers
[PK]
ID     Server
d-29   Live Server
d-30   Test Server
d-31   Live Server

底部两个表中的主键列也是引用ID表的Tickets列的外键。

对于p'升级'的每张Type票证,我需要找出在解决日期之后创建的已关联s票证的数量链接的d票证,其本身是Type'部署',并且是针对Live Server执行的。

我已经编写了一个查询,以使用s子句获取与每个升级p票证关联的GROUP BY票证总数:

SELECT *,count(ts.id)
from [P-ticket_links] ptls
inner join [Tickets] ts on ts.ID=ptls.Link
inner join [Tickets] ts2 on ts2.ID=ptls.Pticket
where ts.Ticket_Type='s'
and ts2.Type='Upgrade'
group by ptls.Pticket

我还可以使用类似的查询找到每个d票证的Live Server部署p票证的解决日期。但是,我遇到的麻烦就是将这两个结果合并在一起,以排除在Live Server部署s票证的解决日期之前创建的d票证。

我已经尝试创建Tickets表的另一个别名,过滤它以包含相关的d-ticket,然后输入像WHERE tickets1.created > tickets3.resolved这样的子句,但这并没有给我权利结果

我认为我需要做的就是返回一个表,其中每一行都包含一个链接到相应s票证的p票证以及{{1}的已解决日期票证链接到该d票证。我可以更改我的数据库结构以在第一个实例中包含信息,但我不想再对我的数据库进行非规范化,我觉得我应该能够用SQL执行此操作。

有人能指出我如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

我已经弄清楚了。这是如何返回我想要的结果:

select *,count(*) from [p-ticket_links] ptls

inner join 

(SELECT
ts2.id as 'p-id', 
ts.resolved as 'd-resolved'
FROM [tickets] ts 
inner join [p-ticket_links] ptl on [ptl].link=ts.id
inner join [d-ticket_servers] dts on dts.id=ts.id
inner join [tickets] ts2 on ptl.pticket=ts2.id
inner join [p-ticket_versions] ptvs on ptvs.id=ts2.id

where [ts].type='Deployment'
and dts.server='Live Server'
and ts.summary like '%upgrade%'
and ts2.project_type='Upgrade'
and ts.state <> 'Duplicate') dres on dres.[p-id]=ptls.pticket

inner join [tickets] ts on ts.id=ptls.link
inner join [tickets] ts2 on ts2.id=ptls.pticket

where ts.ticket_type='S'
and ts2.project_type='Upgrade'
and ts.created > dres.[d-resolved]

group by ptls.pticket