| Author |
Topic |
|
magmo
Aged Yak Warrior
558 Posts |
Posted - 2006-09-26 : 04:38:08
|
| HiI have this query...SELECT DISTINCT dbo.ARTIKEL.ARTIKELNR, MAX(dbo.MASKINTYPER.StartYear) AS StartYearFROM dbo.AVSNITTIMASKINTYP INNER JOIN dbo.AVSNITTSRAD ON dbo.AVSNITTIMASKINTYP.AVSNITTSID = dbo.AVSNITTSRAD.AVSNITTSID INNER JOIN dbo.ARTIKEL ON dbo.AVSNITTSRAD.ARTIKELNR = dbo.ARTIKEL.ARTIKELNR INNER JOIN dbo.MASKINTYPER ON dbo.AVSNITTIMASKINTYP.MASKINTYP = dbo.MASKINTYPER.MASKINTYPGROUP BY dbo.AVSNITTIMASKINTYP.MASKINTYP, dbo.ARTIKEL.ARTIKELNRHAVING (dbo.ARTIKEL.ARTIKELNR = '123456')This query give me this result...123456 NULL123456 2001123456 2003But what I really would like is ...123456 2003How must I change the query to get this result?Best Regards |
|
|
chiragkhabaria
Master Smack Fu Yak Hacker
1907 Posts |
Posted - 2006-09-26 : 04:45:47
|
SELECT DISTINCT dbo.ARTIKEL.ARTIKELNR, MAX(dbo.MASKINTYPER.StartYear) AS StartYearFROM dbo.AVSNITTIMASKINTYP INNER JOINdbo.AVSNITTSRAD ON dbo.AVSNITTIMASKINTYP.AVSNITTSID = dbo.AVSNITTSRAD.AVSNITTSID INNER JOINdbo.ARTIKEL ON dbo.AVSNITTSRAD.ARTIKELNR = dbo.ARTIKEL.ARTIKELNR INNER JOINdbo.MASKINTYPER ON dbo.AVSNITTIMASKINTYP.MASKINTYP = dbo.MASKINTYPER.MASKINTYPGROUP BY dbo.AVSNITTIMASKINTYP.MASKINTYP, dbo.ARTIKEL.ARTIKELNRHAVING (dbo.ARTIKEL.ARTIKELNR = '123456') And dbo.MASKINTYPER.StartYear = MAX(dbo.MASKINTYPER.StartYear) Chirag |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-09-26 : 04:46:15
|
| That's because why you group by BOTH MaskinTyp and Artikelnr.Remove MaskinTyp from GROUP BY.Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-09-26 : 04:47:26
|
[code]SELECT dbo.ARTIKEL.ARTIKELNR, MAX(dbo.MASKINTYPER.StartYear) AS StartYearFROM dbo.AVSNITTIMASKINTYPINNER JOIN dbo.AVSNITTSRAD ON dbo.AVSNITTIMASKINTYP.AVSNITTSID = dbo.AVSNITTSRAD.AVSNITTSIDINNER JOIN dbo.ARTIKEL ON dbo.AVSNITTSRAD.ARTIKELNR = dbo.ARTIKEL.ARTIKELNRINNER JOIN dbo.MASKINTYPER ON dbo.AVSNITTIMASKINTYP.MASKINTYP = dbo.MASKINTYPER.MASKINTYPWHERE dbo.ARTIKEL.ARTIKELNR = '123456'GROUP BY dbo.AVSNITTIMASKINTYP.MASKINTYP, dbo.ARTIKEL.ARTIKELNR[/code]Peter LarssonHelsingborg, Sweden |
 |
|
|
magmo
Aged Yak Warrior
558 Posts |
Posted - 2006-09-26 : 04:48:35
|
| Hi PeterYes I just discovered that, but you bet me to it... Thanks!Regards |
 |
|
|
magmo
Aged Yak Warrior
558 Posts |
Posted - 2006-09-26 : 04:56:37
|
| PeterThere are many Null values in the startyear column, is it possible to only show records that have a value in startyear but still use the MAX option in the query. Here's what I now have...SELECT DISTINCT dbo.ARTIKEL.ARTIKELNR, MIN(DISTINCT dbo.MASKINTYPER.StartYear) AS StartYear, MAX(DISTINCT dbo.MASKINTYPER.EndYear) AS EndYearFROM dbo.AVSNITTIMASKINTYP INNER JOIN dbo.AVSNITTSRAD ON dbo.AVSNITTIMASKINTYP.AVSNITTSID = dbo.AVSNITTSRAD.AVSNITTSID INNER JOIN dbo.ARTIKEL ON dbo.AVSNITTSRAD.ARTIKELNR = dbo.ARTIKEL.ARTIKELNR INNER JOIN dbo.MASKINTYPER ON dbo.AVSNITTIMASKINTYP.MASKINTYP = dbo.MASKINTYPER.MASKINTYPGROUP BY dbo.ARTIKEL.ARTIKELNRBest Regards |
 |
|
|
magmo
Aged Yak Warrior
558 Posts |
Posted - 2006-09-26 : 05:47:53
|
| no need to reply, I solved it... |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-09-26 : 06:11:28
|
Not like this?SELECT dbo.ARTIKEL.ARTIKELNR, MIN(CASE WHEN dbo.MASKINTYPER.StartYear IS NULL THEN 9999 ELSE dbo.MASKINTYPER.StartYear END) StartYear, MAX(CASE WHEN dbo.MASKINTYPER.EndYear IS NULL THEN 0 ELSE dbo.MASKINTYPER.EndYear END) EndYearFROM dbo.MASKINTYPERINNER JOIN dbo.AVSNITTIMASKINTYP ON dbo.AVSNITTIMASKINTYP.MASKINTYP = dbo.MASKINTYPER.MASKINTYPINNER JOIN dbo.AVSNITTSRAD ON dbo.AVSNITTSRAD.AVSNITTSID = dbo.AVSNITTIMASKINTYP.AVSNITTSIDINNER JOIN dbo.ARTIKEL ON dbo.ARTIKEL.ARTIKELNR = dbo.AVSNITTSRAD.ARTIKELNRGROUP BY dbo.ARTIKEL.ARTIKELNR Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-09-26 : 06:12:18
|
| I don't understand why you use both DISTINCT and GROUP BY?Peter LarssonHelsingborg, Sweden |
 |
|
|
magmo
Aged Yak Warrior
558 Posts |
Posted - 2006-09-26 : 06:52:14
|
| Hi PeterI now use this...SELECT dbo.ARTIKEL.ARTIKELNR, MIN(DISTINCT dbo.MASKINTYPER.StartYear) AS StartYear, ISNULL(MAX(DISTINCT dbo.MASKINTYPER.EndYear), 0) AS EndYearFROM dbo.AVSNITTIMASKINTYP INNER JOIN dbo.AVSNITTSRAD ON dbo.AVSNITTIMASKINTYP.AVSNITTSID = dbo.AVSNITTSRAD.AVSNITTSID INNER JOIN dbo.ARTIKEL ON dbo.AVSNITTSRAD.ARTIKELNR = dbo.ARTIKEL.ARTIKELNR INNER JOIN dbo.MASKINTYPER ON dbo.AVSNITTIMASKINTYP.MASKINTYP = dbo.MASKINTYPER.MASKINTYPGROUP BY dbo.ARTIKEL.ARTIKELNRHAVING (NOT (MIN(DISTINCT dbo.MASKINTYPER.StartYear) IS NULL))Regards |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-09-26 : 06:59:29
|
| Try to run both your solution above and my suggestion above, to see which gives greater performance.Peter LarssonHelsingborg, Sweden |
 |
|
|
magmo
Aged Yak Warrior
558 Posts |
Posted - 2006-09-26 : 07:19:18
|
| Hi PeterYour query retrieved all rows in the database so I modified your query so it didn't displayed any null values from the startyear column, after I did that the query took aproximatly 3 sec to run, my query also took about 3 sec to run. Your initial query that retrieved all rows took about 9 sec to run |
 |
|
|
|