Dames en heren,
ben ik weer met een vraagje: ik weet echter niet zeker of dat dit uberhaupt mogelijk is:
Ik ben bezig met het maken van een doorsnede waarin ik kan zien wat de status was van een item op een bepaalde week. Hier heb ik een slimme JOIN voor gekozen, waardoor ik alle statusveranderingen van voor of tijdens die week zie. in Query vorm:
Tables:
Ik heb twee tables:
YEAR_WEEK_TBL
Bevat simpelweg alleen maar jaar en week gegevens:
INDEX_YEAR,
INDEX_WEEK
ITEM_TBL
Bevat de aanpassingsinformatie en de bijbehorende status. Velden:
ITEM_ID,
EDIT_DATETIME,
EDIT_YEAR,
EDIT_WEEK,
STATUS
De EDIT_YEAR en EDIT_WEEK bevatten de jaar en week nummer die bij de EDIT_DATETIME hoort.
1e Query :
Dit geeft dus per week, per item de laatste EDIT_DATETIME. Tesamen met de ITEM_ID is de EDIT_DATETIME uniek , dus komt de tweede query er als volgt uit te zien:
2e query:
Gecombineerd geeft mij dit een lijst met per week alle items die op dat moment zijn aangepast en wat de laatste status binnen die week was. Op zich een toppertje maar mijn gevoel zegt me dat ik die tweede join niet nodig heb. Ik kan me voorstellen dat er een manier is om in de eerste query al de resultaten te beperken tot alleen de row waarin de max date staat, of om via een slimme CASE WHEN constructie die gegevens los te peuteren. Enigste nadeel is dat ik geen idee heb hoe ik het zou moeten aanpakken.
Kan iemand me hiermee op weg helpen? Alvast bedankt!
PS: Ik heb geprobeerd om de ene query in de andere te schuiven, maar om een of andere verdachte reden doet MSSQL dat niet: als ik de twee query's splits en dan uitvoer gaat het goed, maar combineer ik ze dan gaat het fout. Ik heb meerdere malen gechecked dus ik kan me niet voorstellen dat ik een typfout heb gemaakt. Het voorbeeld hier boven is nogal versimpeld: ik gebruik meerdere views om uiteindelijk tot dit geheel te komen. Kan het zijn dat het gebruik van views in views en herhaaldelijk gebruik van dezelfde view de query laat mislukken?
ben ik weer met een vraagje: ik weet echter niet zeker of dat dit uberhaupt mogelijk is:
Ik ben bezig met het maken van een doorsnede waarin ik kan zien wat de status was van een item op een bepaalde week. Hier heb ik een slimme JOIN voor gekozen, waardoor ik alle statusveranderingen van voor of tijdens die week zie. in Query vorm:
Tables:
Ik heb twee tables:
YEAR_WEEK_TBL
Bevat simpelweg alleen maar jaar en week gegevens:
INDEX_YEAR,
INDEX_WEEK
ITEM_TBL
Bevat de aanpassingsinformatie en de bijbehorende status. Velden:
ITEM_ID,
EDIT_DATETIME,
EDIT_YEAR,
EDIT_WEEK,
STATUS
De EDIT_YEAR en EDIT_WEEK bevatten de jaar en week nummer die bij de EDIT_DATETIME hoort.
1e Query :
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| CREATE VIEW TMP_VIEW AS SELECT B.INDEX_YEAR, B.INDEX_WEEK, A.ITEM_ID, MAX(A.EDIT_DATETIME) as MAX_EDIT_DATETIME FROM ITEM_TBL A JOIN YEAR_WEEK_TBL B ON A.EDIT_YEAR < B.INDEX_YEAR OR A.EDIT_WEEK = B.INDEX_YEAR AND A.EDIT_WEEK <= B.INDEX_WEEK GROUP BY B.INDEX_YEAR, B.INDEX_WEEK, A.ITEM_ID |
Dit geeft dus per week, per item de laatste EDIT_DATETIME. Tesamen met de ITEM_ID is de EDIT_DATETIME uniek , dus komt de tweede query er als volgt uit te zien:
2e query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
| SELECT A.INDEX_YEAR, A.INDEX_WEEK, A.ITEM_ID, B.STATUS FROM TMP_VIEW A JOIN ITEM_TBL B ON A.ITEM_ID = B.ITEM_ID AND A.MAX_EDIT_DATETIME = B.ITEM_DATETIME |
Gecombineerd geeft mij dit een lijst met per week alle items die op dat moment zijn aangepast en wat de laatste status binnen die week was. Op zich een toppertje maar mijn gevoel zegt me dat ik die tweede join niet nodig heb. Ik kan me voorstellen dat er een manier is om in de eerste query al de resultaten te beperken tot alleen de row waarin de max date staat, of om via een slimme CASE WHEN constructie die gegevens los te peuteren. Enigste nadeel is dat ik geen idee heb hoe ik het zou moeten aanpakken.
Kan iemand me hiermee op weg helpen? Alvast bedankt!
PS: Ik heb geprobeerd om de ene query in de andere te schuiven, maar om een of andere verdachte reden doet MSSQL dat niet: als ik de twee query's splits en dan uitvoer gaat het goed, maar combineer ik ze dan gaat het fout. Ik heb meerdere malen gechecked dus ik kan me niet voorstellen dat ik een typfout heb gemaakt. Het voorbeeld hier boven is nogal versimpeld: ik gebruik meerdere views om uiteindelijk tot dit geheel te komen. Kan het zijn dat het gebruik van views in views en herhaaldelijk gebruik van dezelfde view de query laat mislukken?
[ Voor 10% gewijzigd door Verwijderd op 11-01-2008 14:53 ]