2017-06-14 6 views
0

Ich habe eine Datenbank wie folgt.MYSQL Holen Sie sich den letzten Datensatz, wo die Startzeit ist gleich der vorherigen Datensätze

| 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  | 

Ich möchte p_id 2 und 4 auf 15 Minuten verschieben. Wie würde ich tue dies mit dem folgenden:

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 

Allerdings weiß ich nicht, was die letzten p_order, da es sein wird, viele Arbeitsplätze voneinander im Anschluss an sein könnte.

Wissen Sie, wie ich das herausfinden würde?

+0

Was über die Codeformatierung? – tilz0R

+0

Ist das besser? Wusste nicht, dass es ohne die Code-Tags so weit wäre. –

+0

@ S.Goodwin was meinst du? (: – num8er

Antwort

0

Versuchen Sie, die kleinste Id ausgewählt werden, die noch nicht zu Ende, wenn der letzte beginnt, zum Beispiel:

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 

Es wäre es einfacher, wenn Sie Datetime statt 2 separate Felder verwendet werden könnte, obwohl

Verwandte Themen