2009-08-27 9 views
0

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.

  1. Ich glaube nicht, dass ich in der verschachtelten select-Anweisung verwendet hat rank2 werden
  2. 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.

Antwort

0

Ich bin nicht 100% sicher, was Sie fragen. Würde COALESCE (rank1, rank2, rankX), wo es den ersten Nicht-Null-Wert zurückgeben würde, für Sie arbeiten?

+0

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