zweithöchster Wert einer Spalte

Werbung:
Was ist, wenn es Werte mehrfach gibt?

Code:
test=*# select * from foo order by s desc;
 s
----
 10
 10
  9
  8
  7
  6
  5
  4
  3
  2
  1
(11 rows)

Soll dann 10 oder 9 kommen?

Falls Du hier 9 erwartest dann ist das ein Fall für dense_rank():

Code:
test=*# select * from foo order by s desc;
 s
----
 10
 10
  9
  8
  7
  6
  5
  4
  3
  2
  1
(11 rows)

Time: 0,191 ms
test=*# select * from (select *, dense_rank() over (order by s desc) from foo order by s desc) x where dense_rank = 2;
 s | dense_rank
---+------------
 9 |  2
(1 row)

Kann MySQL nicht, Du müßtest vorher ein Unique machen. Das nur als Hinweis.
 
Ich drücke Dir einen bunten Mix von ORDER BY, DESC, LIMIT und OFFSET in die Hand.

Passt!
SELECT * FROM `table` ORDER BY `column` DESC LIMIT 1 OFFSET 1

Vielen Dank :)

EDIT: Für den Fall, dass der höchste Wert zwei mal vorkommt, geb ich mich mit dem höchsten auch zufrieden, das wäre in Ordnung für mein Belangen.
Ansonsten lässt sich bestimmt eine oder mehrere If-Klausel(n) einbauen. z.B. (Wenn höchster Wert=zweithöchster Wert) DANN dritthöchster Wert.
 
Zuletzt bearbeitet:
streich in #3 das unique und ersetze es mit distinct:

Code:
test=*# select * from foo order by s desc;
 s
----
 10
 10
  9
  8
  7
  6
  5
  4
  3
  2
  1
(11 rows)

Time: 0,195 ms
test=*# select distinct s from foo order by s desc limit 1 offset 1;
 s
---
 9
(1 row)
[code]
 
Werbung:
Zurück
Oben