Background
私のデータベースは、ユーザーとその変更するユーザー名を追跡しています。それぞれの実際の人は、時間の経過と共に多くのユーザー名を持つことができますが、1つだけが「最新」(現在のもの)です。これは、最新の日付と最新の日付を持つことで実現されます。最新のものであれば、toDateはNULLで、最新の列が1に設定されています。残念ながら、データは破損しています。最新フラグ。 もう1つのバグは、あるべきではないにしてもnullであるtoDateがあることです。データベースの不良データを修正してください。最新のフラグ
Question
最新のフラグを1に設定/更新する必要がある行を見つけるにはどうすればよいですか? (今のところ2番目のバグは心配する必要はありませんが、最新のフラグを更新するための正しい行を見つけるのは難しいかもしれません)。
正しいSELECTは、次の例では行5と8(ただし行6は返さない)を返します。
Example
PersonId = 1は正しい人です。 PERSONID = 2 5行に最新= 1が欠落していPERSONID = 3(行6に第二のバグ(toDateまで= null)を有し、第2のバグを回避するために行の最新= 1~8
が欠落しています行5)は、修正する必要のある行のfromDateが常に大きい(新しい)ことがわかります。
私が参加するために試みたが、私は右のそれを得ることができませんでした...ここで
は表「ユーザー」である:
+----+--------+----------+------------+------------+--------+
| id | name | personId | fromDate | toDate | latest |
+----+--------+----------+------------+------------+--------+
| 1 | Perold | 1 | 2016-12-01 | 2016-12-31 | 0 |
| 2 | Pernew | 1 | 2016-12-31 | NULL | 1 |
| 3 | Body | 2 | 2016-01-01 | 2016-12-01 | 0 |
| 4 | Bo | 2 | 2016-12-01 | 2016-12-31 | 0 |
| 5 | Bonew | 2 | 2016-12-31 | NULL | 0 | <-- Wrong latest
| 6 | Joe | 3 | 2016-01-01 | NULL | 0 | <-- Wrong toDate, correct latest
| 7 | Joey | 3 | 2016-12-01 | 2016-12-31 | 0 |
| 8 | Jo | 3 | 2016-12-31 | NULL | 0 | <-- Wrong latest
+----+--------+----------+------------+------------+--------+
これはMySQL用ですか? – Strawberry
はい、申し訳ありません。私はMySQL 5.7を使ってImを書いていたはずです。 – Miyagi