2017-06-14 79 views
0

我有一个数据库如下。MYSQL获取最后一条记录,其中开始时间等于以前的记录结束时间

| p_id | p_start_date | p_start_time | p_end_date | p_end_time | p_order | 
| 2 | 2017-06-01 |  00:00 | 2017-06-01 | 01:00 | 1  | 
| 4 | 2017-06-01 |  01:00 | 2017-06-01 | 02:15 | 2  | 
| 1 | 2017-06-02 |  00:00 | 2017-06-02 | 01:30 | 3  | 
| 3 | 2017-06-03 |  00:00 | 2017-06-03 | 00:30 | 4  | 

我想第15分钟移动P_ID 2和4。 我会怎么做这与以下:

UPDATE 
    press as p 
SET 
    p.p_start_date = cast(DATE_ADD(CONCAT(p.p_start_date, ' ', p.p_start_time), INTERVAL 15 MINUTE) as DATE), 
    p.p_start_time = cast(DATE_ADD(CONCAT(p.p_start_date, ' ', p.p_start_time), INTERVAL 15 MINUTE) as TIME), 
    p.p_end_date = cast(DATE_ADD(CONCAT(p.p_end_date, ' ', p.p_end_time), INTERVAL 15 MINUTE) as DATE), 
    p.p_end_time = cast(DATE_ADD(CONCAT(p.p_end_date, ' ', p.p_end_time), INTERVAL 15 MINUTE) as TIME), 
    p.p_order = p.p_order + 1 
WHERE 
    p.p_order >= 1 AND p.p_order <= 2 

但是我不知道是什么最后的p_order将是为有可能是相互下面很多工作。

你知道我会如何找到它吗?

+0

什么关于代码格式? – tilz0R

+0

更好吗?没有意识到这将是代码标签。 –

+0

@ S.Goodwin你的意思是? (: – num8er

回答

0

尝试选择最后一个启动时不结束最小的编号,例如:

SELECT min(t2.id) from MyTable t1 LEFT JOIN MyTable t2 on t1.id - 1 = t2.id and t1.id > 2 WHERE t1.end_date = t2.start_date and t1.end_time = t2.start_time 

这将使它更容易,如果你可以使用日期时间,而不是两个独立的领域,虽然

相关问题