# brauche mal kurz hilfe bei einem select-stmt



## DP (13. Jul 2004)

genau. 

ich habe eine tabelle bestellungen und eine tabelle mahnstufen.

nun will ich dass wenn die entsprechende bestellung älter ist als anzahl tage in tabelle mahnstufe, die bestellung entsprechend angemahnt wird.

soweit so gut.

nun habe ich das problem, dass einige bestellungen so alt sind, dass mehrere mahnstufen greifen und der dann entsprechend mahnungen generiert. 

wie muss ich mein statement modifizieren, dass nur die höchste mahnstufe greift?

danke


----------



## bummerland (13. Jul 2004)

es gibt in mysql die funktion MAX. damit müsste es gehen. einfach noch WHERE MAX(spalte) mit in deinen sql-befehl.


----------



## DP (13. Jul 2004)

teste ich nachher ab. wenn's nicht klappt, dann gibt es


----------



## DP (14. Jul 2004)

das war wohl nichts... 

ich habe jetzt folgendes:


```
SELECT 
	distinct(bestellungen.auftragsnr), 
	bestellungen.*, 
	max(mahnstufen.mahnstufe), max(mahnstufen.mahnfrist) as FRIST, max(mahnstufen.id) as IID
FROM 
	bestellungen, 
	mahnstufen, 
	bestellungen_zahlungsarten 
WHERE 
	DATE_ADD(bestellungen.datum, INTERVAL mahnstufen.mahnfrist DAY) < now() AND 
	DATE_ADD(bestellungen.datum_mahnung, INTERVAL mahnstufen.mahnfrist DAY) < now() AND 
	bestellungen.status_bearbeitung != 99 AND 
	bestellungen.status_bearbeitung != 11 AND 
	bestellungen.status_bearbeitung != 14 AND 
	bestellungen.status_bearbeitung != 4 AND 
	bestellungen.status_bearbeitung != 3 AND 
	bestellungen.locked = 0 AND 
	mahnstufen.r_land = bestellungen.r_land AND 
	bestellungen.bezahlt = 0 AND 
	bestellungen.zahlungsweise = bestellungen_zahlungsarten.zahlungsart_bez AND 
	bestellungen_zahlungsarten.id = mahnstufen.id_zahlungsart 
GROUP BY
	bestellungen.auftragsnr
ORDER BY 
	bestellungen.datum
```

nun habe ich noch folgendes problem: 

in meiner tabelle "mahnstufen" gibt es ein feld "beschreibung", welches ich auch auslesen will. wenn ich das feld einfach in den select einbinde, hat das feld immer den gleichen wert. wie änder ich das ab, damit der den korrekten wert nimmt, der für die entsprechende zeile aus den den 3 max()-werten gültig ist?

danke


----------



## nollario (19. Jul 2004)

kenn ich...

da du per max eine aggregatsfunktion nutzt, kommst du nicht an den eintrag aus der gleichen zeile in der tabelle mahnstufen dran.... 

meistens gibts da nur einen ausweg: 2 select... ;-)


----------



## citizen_erased (20. Jul 2004)

kannst du nicht per ORDER BY die mahnstufen.mahnstufe ordnen. standardmäßig sollte die letzte zeile die größte mahnstufe betragen (oder du musst ASC oder DESC noch hinschreiben... habe das jetzt nicht so im kopf):

ResultSet bietet mit last() den zugriff auf die größte mahnstufe. könnte das klappen?


----------



## DP (20. Jul 2004)

also erstmal vielen dank für die unterstützung hier.

ich habe das mahnwesen anders aufgebaut und brauche mir am sql nicht mehr die ohren brechen. habe eine eigene tabelle mit den mahnzeiten pro auftrag erstellt und fertig


----------

