0

I have a MySQL table that looks like this:

+-------------+---------+------+-----+---------+-------+
| Field       | Type    | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| person_id   | int(11) | NO   | MUL | NULL    |       |
| location_id | int(11) | NO   | MUL | NULL    |       |
| date_signed | date    | NO   |     | NULL    |       |
| date_ended  | date    | YES  |     | NULL    |       |
+-------------+---------+------+-----+---------+-------+

Where all of the records are like this:

+-----------+-------------+-------------+------------+
| person_id | location_id | date_signed | date_ended |
+-----------+-------------+-------------+------------+
|         1 |          49 | 2007-09-29  | NULL       |
|         1 |          41 | 2010-10-09  | NULL       |
|         2 |          45 | 2007-09-29  | NULL       |
|         2 |          58 | 2007-12-16  | NULL       |
|         3 |          49 | 2007-09-29  | NULL       |
|         4 |          45 | 2007-09-29  | NULL       |
|         4 |          35 | 2013-10-04  | NULL       |
|         5 |          45 | 2007-09-29  | NULL       |
|         5 |          37 | 2009-01-09  | NULL       |
|         5 |          32 | 2009-10-08  | NULL       |
+-----------+-------------+-------------+------------+

I'm trying to update each person's date_ended to be one day less than the date_signed in the next chronological row for that person:

+-----------+-------------+-------------+------------+
| person_id | location_id | date_signed | date_ended |
+-----------+-------------+-------------+------------+
|         1 |          49 | 2007-09-29  | 2010-10-08 |
|         1 |          41 | 2010-10-09  | NULL       |
|         2 |          45 | 2007-09-29  | 2007-12-15 |
|         2 |          58 | 2007-12-16  | NULL       |
.
.
.

But I can't figure out how to select the next chronological record. I tried a few suggestions from similar questions:

UPDATE a column based on the value of another column in the same table

Mysql - update table column from another column based on order

ROW_NUMBER() in MySQL

But I couldn't get them to work. Is there a way to do this in MySQL?

SQL Fiddle: http://sqlfiddle.com/#!9/8b5219/1

Brandon
  • 4,491
  • 6
  • 38
  • 59

0 Answers0