我有一张像
这样的表格tctid owner Mindate
1165267 Unassigned 2016-11-01 16:53:19
1165267 John 2016-11-02 10:54:06
1165267 Harry 2016-11-02 17:02:38
1181499 Priority 2016-11-02 18:28:18
1181499 Abraham 2016-11-02 18:36:10
1181499 John 2016-11-10 01:01:50
1181499 Abdullah 2016-11-13 11:03:36
1181499 Harry 2016-11-17 19:25:31
1183682 Unassigned 2016-11-03 19:07:00
1183682 Harry 2016-11-03 19:09:57
1183682 John 2016-11-03 19:20:39
1183682 Harry 2016-11-08 13:15:57
1183682 John 2016-11-08 14:08:46
1183682 David 2016-11-19 09:45:31
1183682 IT 2016-12-13 22:06:50
1183682 John 2016-12-14 20:19:37
1183682 Harry 2016-12-14 22:12:03
现在我想找到行之间的差异,直到下一个唯一的故障单ID出现。我正在寻找这个出局
tctid owner Mindate Diff in Day:Hour:Min
1165267 Unassigned 2016-11-01 16:53:19 0:18:0
1165267 John 2016-11-02 10:54:06 0:6:8
1165267 Harry 2016-11-02 17:02:38 For Last entry no calculation
1181499 Priority 2016-11-02 18:28:18 0:0:7
1181499 Abraham 2016-11-02 18:36:10 7:6:25
1181499 John 2016-11-10 01:01:50 3:10:1
1181499 Abdullah 2016-11-13 11:03:36 4:8:21
1181499 Harry 2016-11-17 19:25:31 For Last entry no calculation
1183682 Unassigned 2016-11-03 19:07:00 0:0:2
1183682 Harry 2016-11-03 19:09:57 0:0:10
1183682 John 2016-11-03 19:20:39 4:17:55
1183682 Harry 2016-11-08 13:15:57 0:0:52
1183682 John 2016-11-08 14:08:46 10:19:36
1183682 David 2016-11-19 09:45:31 24:12:21
1183682 IT 2016-12-13 22:06:50 0:22:12
1183682 John 2016-12-14 20:19:37 0:1:52
1183682 Harry 2016-12-14 22:12:03 For Last entry no calculation
并且对于同一张票的最后一个条目,不需要任何差异。
答案 0 :(得分:2)
您是否正在寻找与之前的机票相比的当前时差,您想要写入当前的这种差异?尝试使用TIMEDIFF
在每个新插入中选择上一个ticketid的时间数据并使用TIMEDIFF,此值保存到插入的(新值)和列名previsous_diff或类似的
如果您在创建新故障单时添加时间差,那么前一故障单过程的时间差将会很复杂,问题是是否有必要?
答案 1 :(得分:2)
抱歉,在MySQL中你必须在Select Query中使用CASE(而不是IF)(我误认为是Oracle)
select t.*, (
case when((
select count(t2.tctid)
from tickets t2
where t2.tctid = t.tctid and t.mindate < t2.mindate
order by t2.tctid, t2.mindate ASC) > 1)
THEN ( select TIMEDIFF(t2.mindate,t.mindate)
from tickets t2
where t2.tctid = t.tctid and t.mindate < t2.mindate
order by t2.tctid, t2.mindate ASC LIMIT 1 )
ELSE 'For Last entry no calculation' END ) as diff
from tickets t order by t.tctid, t.mindate ASC;
好的,我在我的数据库中尝试了,但你的插入时间格式无效(时间有相同的零),请尝试使用此代码,并根据需要进行更改。对于比较日期,如果此版本无法正常工作,请使用!=或某些内容与MySql中的日期进行比较。
答案 2 :(得分:1)
如果您需要编辑现有数据,或者只计算它直接使用hava 2选项:
对于MySql使用类似的东西:
select
t.*,
(
select
IF count(t2.tctid) > 1 THEN
(
// You must select 1 value from previous select query
select TIMEDIFF(t2.mindate,t.mindate)
)
ELSE
'For Last entry no calculation '
END IF
from tickets t2
where t2.tctid=t.tctid and t.mindate <> t2.mindate
order by t2.tctid, t2.mindate ASC
)
from tickets t order by t.tctid, t.mindate ASC;