Ich habe ein Wartungs-Skript, das eine Reihe von Daten von einer Datenbank zu einer anderen dumps.das nächste Ergebnis innerhalb IFNULL
Ich versuche, die Daten als
SELECT id, IFNULL(rank1,(SELECT rank2
FROM table
WHERE rank1 IS NOT NULL and
rank2<rank2 of current row
ORDER BY rank2 LIMIT 1)) FROM table
Was ich bin versucht zu bekommen mit dem rank2 der aktuellen Reihe zu bekommen, ist die nächste rank2 wo Rank1 nicht null ist. Ich mache die Annahme, dass Rang 1 ist ein wirksamer Ersatz für Rang 2
Also, ich glaube, ich habe zwei Probleme.
- Ich glaube nicht, dass ich in der verschachtelten select-Anweisung verwendet hat rank2 werden
- Ich weiß nicht, wie zu sagen, ‚am nächsten
rank2<rank2
zu aktuellen bekommen.
Die Werte I für Rank1 Bereich von 0-20,000 haben und rank2 von 0-150,000 reicht (nicht sicher, warum das wäre egal). Es gibt keine effektive Korrelation zwischen den Rängen.
Rank1 ist immer eine zuverlässigere Zahl, aber ist oft Null, also versuche ich, meine Bestellung mit dieser Art von Ersatz zu täuschen.
Hier ist ein wenig Beispieldaten als Beispiel
id rank1 rank2 1 120,000 14,000 2 120,000 18,420 3 126,000 15,500 4 85,000 NULL 5 75,000 16,000 6 70,000 15,700 7 68,000 NULL 8 42,000 NULL 9 26,000 NULL 10 21,500 8,000
verwenden ich wieder eine Ordnung von 2,5,4,6,7,3,1,8,9,10 bekommen würde hoffen . oder etwas in der Nähe. Grundsätzlich, wenn ich eine Null für Rang 2 habe, bekomme ich den nächsten Rang2 für den nächsten Rang1.
Ich erwarte nicht, dass dies "perfekt" ist, aber besser als nur auf Rang 1 zu sortieren.
Ich denke nicht, ich versuche, für alle Zeilen zu bekommen, und von was ich verstehe, wird COALESCE mir nur den ersten Nicht-Null-Wert geben. Ich versuche, den nächsten Nicht-Null-Wert zu erhalten. Ich bearbeite die Frage mit Beispieldaten. – pedalpete