2015-06-12 48 views
0

我试图选择在两个日期之间具有特定机票类='SR'的状态当前处于打开状态的机票(即保留,挂起供应商,进行中)(2015年4月1日 - 2015年4月30日)。选择具有状态历史记录的ticketid

select * from tkt_table where class = 'SR' and status = 'INPROG' or status = 'PENDING' or status = 'INC'... order date by datereport desc 

有两个表,有门票信息的一个是tkt_table和其他人有票状态历史tktStatus_table。他们都有tktid作为关键。

我如何得到这个SQL语句,我告诉所有的有选择的日期(4月1日 - 30April)之间改变状态的门票

非常感谢:)

左表是tkt_table,右为tkt_status

tkt_table tkt_status

回答

0

您可以在having子句中使用COUNT(DISTINCT状态),就像这样:

SELECT * FROM 
tkt_table t inner join 
(SELECT tktid, count(distinct status) cnt FROM tktStatus_table 
WHERE dateReport >= '20150401' AND dateReport < '20150501' 
GROUP BY tktid 
HAVING COUNT(DISTINCT status) > 1) as a on t.tktid=a.tktid 
+0

感谢查,我试图让每张ticketid的状态有多少次变化,票状态已经打开(INPROG,HOLD,PEND等) – user4070102

0

可以join两个表,然后Group By通行证ID

SELECT tiketId from tkt_table tt JOIN tktStatus_table ts on tt.tiketId = ts.tiketId 
where Class = 'SR' and dateReport Between '2015-04-01' AND '2015-04-30' 
Group BY tktid 
Having Count(DISTINCT status) > 1 
相关问题