[MySQL] Max() by 0-value

Pagina: 1
Acties:
  • 375 views sinds 30-01-2008
  • Reageer

  • BMWHeaven
  • Registratie: Juli 2002
  • Laatst online: 27-11 21:17
Hallo.
Ik ben bezig met een sql-statement dat de minimale en maximale waarde uit een tabel haalt voor een bepaald type auto.
De tabel is als volgt ingedeeld (eenvoudige weergave):
carspecs (columns):
- serie: serie van de auto
- typenummer: typenummer van de auto
- yearbegin: begin bouwjaar
- yearend: eind bouwjaar (deze is 0 indien hij nog steeds gebouwd wordt)
- model: automodel

serietypenummeryearbeginyearendmodel
3e4619992003316
3e4619992004318
3e4620030320
3e4620040325

Met een sql statement wil ik per serie en type auto het minimale begin bouwjaar en het maximale eind bouwjaar weergeven, naar aanleiding van bovenstaande tabel zou deze dit moeten terugkeren:
serie 3, typenummer e46, yearbegin 1999, yearend 2007

maar het keert dit terug:
serie 3, typenummer e46, yearbegin 1999, yearend 2004

met behulp van deze code:
SQL:
1
SELECT serie, typenummer, MIN(yearbegin) as yearbegin, max(yearend) as yearend FROM carspecs GROUP BY serie, typenummer ORDER BY series, typenummer


Mijn sql statement pakt dus de waarde van de auto met model 318 (dit heeft de hoogste max, namelijk 2004), maar ik wil dat hij 2007 terugkeert, aangezien er nog yearend velden op 0 staat (wat betekent dat deze nog wordt gebouwd).
Hoe is het mogelijk om deze de waarde van het huidige jaar te geven?

(bij onduidelijkheid; vraag :))
bedankt!

[ Voor 32% gewijzigd door BMWHeaven op 23-04-2007 00:50 . Reden: verduidelijking ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
"voor een bepaald type auto".... .... merk hoef ik zeker niet te raden? ;)

ik zou zeggen, gebruik een if-statement (weet ff niet precies uit mijn hoofd hoe IF's gaan in MySQL, dat mag je zelf uitzoeken, maar zoiets):
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    serie, 
    typenummer, 
    MIN(yearbegin) as yearbegin, 
    IF min(yearend) = 0 THEN
        YEAR(NOW())
    ELSE
        max(yearend)
    AS yearend
FROM
    carspecs
GROUP BY
    serie, 
    typenummer 
ORDER BY 
    series, 
    typenummer

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 08:58

Reinier

\o/

Je kunt yearend volgens mij beter leeg laten (NULL), dat is semantisch juister dan het jaar 0.

Dan werkt dit volgens mij:
SQL:
1
2
3
4
5
SELECT serie, typenummer, 
     MIN(yearbegin) as yearbegin, max( isnull( yearend , 2007 ) ) as yearend 
FROM carspecs 
GROUP BY serie, typenummer 
ORDER BY serie, typenummer

  • BMWHeaven
  • Registratie: Juli 2002
  • Laatst online: 27-11 21:17
Geweldig, bedankt!
@Edwardvb; is idd niet heel erg moeilijk te raden ;)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.