Hallo Forum,
ich habe eine String-Spalte in mysql, die ich je nach Status in verschiedenen Nummernkreisen mit einem Kürzel vorangestellt hochzähle. Der Status des Vorganges steht in einer eigenen Spalte.
Beispiel:
KL-0001 bis KL-9999 (innerhalb dieses Nummernkreises stehen auch KLB-Vorgänge)
FC-0001 bis FC-9999 (innerhalb dieses Nummernkreises stehen auch FCL-Vorgänge)
usw.
.
Tabelle:
ID|myStatus|MeineSpalte
1|KL|KL-0012
2|KLB|KLB-0013
3|FCL|FCL-0001
4|FC|FC-0002
usw.
Nun möchte ich in einer Abfrage z.b für den Status KL den derzeit höchsten Wert ermitteln:
SELECT
LPAD(MAX(CAST(SUBSTRING_INDEX(MeineSpalte, "-", -1) AS Wert)),4,"0")
FROM myTable
WHERE (myStatus= 'KL' OR myStatus = 'KLB')
Das funktioniert soweit auch sehr gut, selbst mit Datenbanken mit sehr vielen Einträgen.
Meine Frage:
Ich hätte gerne aus derselben Zeile des Maximumwertes auch die dazugehörige ID dieses Eintrages.
Also zum Beispiel:
Wert=0013 --> dazugehörige ID=2
Ich habe zwar auch hierzu eine Query, die funktioniert, aber die ist riesig lang und ich frage mich, ob es nicht auch leichter geht:
Select ID
from myTable
where
(myStatus = 'KL' OR myStatus='KLB')
AND (CAST(SUBSTRING_INDEX(MeineSpalte, "-", -1) AS Wert)) =
(SELECT LPAD(MAX(CAST(SUBSTRING_INDEX(MeineSpalte, "-", -1) AS Wert)),4,"0")
FROM myTable
WHERE (myStatus = 'KL' OR myStatus='KLB'))
Gruß, Pit