Ik ben al een tijdje aan het worstelen met een query. Deze moet een item zijn laatst gevonden attribute-cost voor elk beschikbaar kwartaal tonen.
De tabel ziet er als volgt uit:
En de gewenste ouput is dan als volgt voor item met id 1:
Ik groepeer nu op jaar en kwartaal en join met het hoogst gevonden resultaat.
Helaas geeft dit een ongewenst resultaat:
Waar ga ik in de fout met men query? Kan iemand me in de juiste richting wijzen?
De tabel ziet er als volgt uit:
| id | attribute | cost | entryDate |
| 1 | blaat 1 | 10 | 2001-03-11 |
| 1 | blaat 1 | 15 | 2002-01-11 |
| 1 | blaat 1 | 20 | 2002-01-12 |
| 1 | blaat 2 | 5 | 2002-01-12 |
| 1 | blaat 2 | 100 | 2002-01-30 |
| 1 | blaat 2 | 1 | 2001-01-11 |
| 2 | blaat 1 | 60 | 2001-03-11 |
En de gewenste ouput is dan als volgt voor item met id 1:
| id | attribute | cost | quarterDate |
| 1 | blaat 1 | 10 | 2001Q1 |
| 1 | blaat 2 | 1 | 2001Q1 |
| 1 | blaat 1 | 20 | 2002Q1 |
| 1 | blaat 2 | 100 | 2002Q1 |
Ik groepeer nu op jaar en kwartaal en join met het hoogst gevonden resultaat.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SELECT id, attribute, cost, entryDate, b.Yr, b.Qtr FROM items AS a JOIN ( SELECT Yr = DATEPART(YEAR, entryDate), Qtr = DATEPART(QUARTER, entryDate), MAX(entryDate) AS lastDate FROM items WHERE id = 1 GROUP BY DATEPART(YEAR, entryDate), DATEPART(QUARTER, entryDate) ) AS b ON a.entryDate = b.lastDate WHERE id = 1 |
Helaas geeft dit een ongewenst resultaat:
| id | attribute | cost | quarterDate |
| 1 | blaat 1 | 10 | 2001Q1 |
| 1 | blaat 2 | 100 | 2002Q1 |
Waar ga ik in de fout met men query? Kan iemand me in de juiste richting wijzen?