webForumDet fria alternativet

Få ut högsta datum trots group by

Databaser & SQL

2 svar · 242 visningar · startad av Joakim

Medlem sedan dec. 199982 inlägg
Frågan#1

Hej!

Alla är vi barn i början och i starten av mitt mySQL-användande gjorde jag ett enkelt system för att hålla koll på avtal och när dessa gick ut. Allt bygger på en och samma tabell där flera rader kan ha samma avtalsnummer. Info som kommentar osv finns i den första posten för varje avtalsnummer. Select-satsen nedan avänds för att visa avtal som gått ut, och det fungerar jättebra, det finns bara en detalj som man kan irritera sig på. Om avtalet har förlängts vid något tillfälle, och det är denna "förlängning" som nu gått ut, så visas alltid slutdatum för den första avtalsperioden som registrerats, inte för den avtalsperiod som gått ut. Jag skulle alltså för varje rad också vilja hämta ut det högsta slutdatumet för det avtalsnumret. Kanske blir rörigt nu, men någon kanske förstår? =) Hur går "tänket" för att lösa detta?

SELECT ab_number, ab_contact, ab_date_end FROM tabell GROUP BY ab_number HAVING max(ab_date_end) <= current_date ORDER BY ab_date_end ASC, ab_owner ASC

Tack på förhand

Medlem sedan dec. 200012 464 inlägg
#2

Den där frågan är helt fel.

Om du använder grpup by så skall alla kolumner i select-listan antingen ingå i group by eller vara argument till en mängdfunktion. Mysql tillåter den konstruktion men det blir icke förutsägbara resultat. Du kan inte förutsätta att du får det högsta värdet på ab_end_date av de som är mindre än eller lika med current_date.

Sen så gör du order by på ab_owner där du inte har någon kontroll på vilket värde som väljs. Även den typen av konstruktioner borde inte godkännas.

När det gäller grundfrågan så går det inte att få fram med en fråga i Mysql (om du inte har version 4.1) eftersom det krävs en subselect.

Medlem sedan dec. 199982 inlägg
#3

Frågan som används ser ej ut exakt som mitt exempel, jag har SELECT *men valde här några kollumner i ett försök att göra det mer lättförståligt. För övrigt så är frågan ett svar från dig som jag fick när jag frågade här i samband med att systemet skrevs. :)

Att kunna lista vilka avtal som löpt ut kom som ett önskemål i efterhand, därav den bristfälliga systemeringen..

MVH
Joakim

255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)