2017-05-17 34 views
0

的ID我有一个表下方更新如果基于的时间差

std_id intra_id number startime   
1  245  18970 20170101 10:30:31 
2  245  18970 20170101 10:40:00 
3  245  18970 20170101 10:50:12 
4  789  6586 20170101 12:34:45 
5  754  346456 20170101 10:23:45 
6  4332 234567 20170101 10:13:40 
7  4332 234567 20170101 10:26:46 

加入表

intra_id number endimeime 
    245  18970 20170101 10:29:31 
    789  6586 20170101 12:34:45 
    754  346456 20170101 10:23:45 
    4332 234567 20170101 10:12:30 

预期输出:

std_id intra_id number startime   diff 
    1 245 18970 2017-01-01 10:30:31 60 
    2   18970 2017-01-01 10:40:00 629 
    3   18970 2017-01-01 10:50:12 1241 
    4 789 6586 2017-01-01 12:34:45 0 
    5 754 346456 2017-01-01 10:23:45 0 
    6 4332 234567 2017-01-01 10:13:40 70 
    7   234567 2017-01-01 10:26:46 856 

我已经花时间尝试这样做I/P开始时间和加入表格结束时间之间的差异。但它不会根据我的预期产出进行更新。

所以当我为同一号码,但不同std_id intra_id计数> 1,那么它必须有一个针对具有较少的差异时

+0

我不明白你是如何到达输出的? –

+0

我还没有,我必须达到预期的输出。我必须根据时差对主表进行更新 – Rajesh

+1

您不清楚如何使用您提供的数据达到您的预期输出。 –

回答

1

您可以使用下面的查询数单intra_id:

SELECT std_id, IF(grp = 1, intra_id, '') AS intra_id, 
     number, startime, diff 
FROM (  
    SELECT std_id, 
      intra_id, 
      @grp := IF(intra_id = @id, @grp + 1, 
        IF(@id := intra_id, 1, 1)) AS grp, 
      number, startime, diff 
    FROM (
     SELECT t1.std_id, t1.intra_id, t1.number, t1.startime, 
      TIME_TO_SEC(TIMEDIFF(t1.startime, t2.endtime)) AS diff 
     FROM table1 AS t1 
     JOIN table2 AS t2 ON t1.intra_id = t2.intra_id) AS t 
    CROSS JOIN (SELECT @id := 0) AS v 
    ORDER BY t.intra_id, diff) AS x; 

该查询使用变量来实现intra_id“不显示”效果,尽管这最好由应用程序的表示逻辑处理。

Demo here

+0

感谢您的查询。但我仍然看到intra_id ahs的值,其中std_id = 3 ..它也应该是null – Rajesh

+0

@Rajesh请检查我所做的修改。 –

+0

谢谢它的工作。 – Rajesh