Ik zit al "jaren" met een dingetje in databases dat waar ik geen andere oplossing voor weet dan hetgeen ik altijd toepas.
Het gaat om het bepalen van de laagste "status" (of iets soortgelijks) van gegroepeerde zaken
In mijn oplossing heeft een status een "volgorde" waarmee bepaalt wordt wat de prioriteit van een status is, in bovenstaand voorbeeld doelbewust niet gelijklopend met de ID (want dat levert mijn problem)
Stel ik heb een project dat onderverdeeld is in subprojecten. Die subprojecten hebben een kenmerk. Nu wil ik bepalen wat van een "kenmerk" (gegroepeerd) de laagste status is.
Bijv.:
project 1, subproject 1.1, kenmerk A1, status A
project 1, subproject 1.2, kenmerk B1, status B
project 1, subproject 1.3, kenmerk B1, status C
project 1, subproject 1.4, kenmerk A1, status C
project 1, subproject 1.5, kenmerk A1, status C
In dit geval is de laagste status voor kenmerk A1 "A", voor kenmerk B1 is de laagste status "B"
Zoals ik het oplos bepaal ik met een query (versimpeld) per "kenmerk" wat de laagste status-volgorde is
Later kan ik via de "volgorde" de statuseigenschappen erbij halen. Probleem is dat ik dit liever op de StatusID doe, maar die kan ik niet - voor zover ik weet - in de query erbij halen: zodra ik dit doe wordt de StatusID ook "gegroepeerd" en creert de statusID extra groepen waardoor ik niet meer één laagste status per "kenmerk" heb, maar per kenmerk/statusID wat niet werkt aangezien volgorde en statusID 1-1 verbonden zijn en ik vervolgens alle voorkomende statussen heb ipv alleen de laagste
Normaal is dit niet zo'n ramp en ik werk altijd al met deze oplossing, maar het gaat natuurlijk mis wanneer (onbedoeld) twee statussen dezelfde volgorde hebben, vandaar dat ik liever de statusID zou willen gebruiken om de resultaten van deze query aan de juiste status te knopen.
Nu kan ik op de een of andere manier voorkomen dat statussen dezelfde volgordenr kunnen hebben, maar ik vroeg mij af of de gewenste selectie met SQL toch mogelijk is? M.a.w. per kenmerk de laagste volgorde, maar met weergave van de statusID die hoort bij die volgorde
Dit is dus wat ik zoek:
Maar dit levert een extra groeperingslevel op
Elke manier die ik kan verzinnen (bijv. een query na deze maken die de juiste statusID bij een volgorde opzoekt) heeft hetzelfde problem wanneer statussen hetzelfde volgordenr hebben
Het combineren van de twee waarden lijkt mij ook niet werken aangezien de ID elke "willekeurige" waarde kan hebben t.o.v. de volgorde en daarmee de volgorde in de war kan sturen.
Ik hoop dat duidelijk is wat mijn probleem is.
Het gaat om het bepalen van de laagste "status" (of iets soortgelijks) van gegroepeerde zaken
ID | Status | Volgorde |
3 | A | 0 |
2 | B | 10 |
1 | C | 100 |
In mijn oplossing heeft een status een "volgorde" waarmee bepaalt wordt wat de prioriteit van een status is, in bovenstaand voorbeeld doelbewust niet gelijklopend met de ID (want dat levert mijn problem)
Stel ik heb een project dat onderverdeeld is in subprojecten. Die subprojecten hebben een kenmerk. Nu wil ik bepalen wat van een "kenmerk" (gegroepeerd) de laagste status is.
Bijv.:
project 1, subproject 1.1, kenmerk A1, status A
project 1, subproject 1.2, kenmerk B1, status B
project 1, subproject 1.3, kenmerk B1, status C
project 1, subproject 1.4, kenmerk A1, status C
project 1, subproject 1.5, kenmerk A1, status C
In dit geval is de laagste status voor kenmerk A1 "A", voor kenmerk B1 is de laagste status "B"
Zoals ik het oplos bepaal ik met een query (versimpeld) per "kenmerk" wat de laagste status-volgorde is
code:
1
2
| Select subproject.Kenmerk, Min(status.volgorde) from subprojecten/status GROUP BY Kenmerk, Volgorde |
Later kan ik via de "volgorde" de statuseigenschappen erbij halen. Probleem is dat ik dit liever op de StatusID doe, maar die kan ik niet - voor zover ik weet - in de query erbij halen: zodra ik dit doe wordt de StatusID ook "gegroepeerd" en creert de statusID extra groepen waardoor ik niet meer één laagste status per "kenmerk" heb, maar per kenmerk/statusID wat niet werkt aangezien volgorde en statusID 1-1 verbonden zijn en ik vervolgens alle voorkomende statussen heb ipv alleen de laagste
Normaal is dit niet zo'n ramp en ik werk altijd al met deze oplossing, maar het gaat natuurlijk mis wanneer (onbedoeld) twee statussen dezelfde volgorde hebben, vandaar dat ik liever de statusID zou willen gebruiken om de resultaten van deze query aan de juiste status te knopen.
Nu kan ik op de een of andere manier voorkomen dat statussen dezelfde volgordenr kunnen hebben, maar ik vroeg mij af of de gewenste selectie met SQL toch mogelijk is? M.a.w. per kenmerk de laagste volgorde, maar met weergave van de statusID die hoort bij die volgorde
Dit is dus wat ik zoek:
code:
1
2
| Select subproject.Kenmerk, Min(status.volgorde), subproject.StatusID from subprojecten/status GROUP BY Kenmerk, Volgorde, StatusID |
Maar dit levert een extra groeperingslevel op
Elke manier die ik kan verzinnen (bijv. een query na deze maken die de juiste statusID bij een volgorde opzoekt) heeft hetzelfde problem wanneer statussen hetzelfde volgordenr hebben
Het combineren van de twee waarden lijkt mij ook niet werken aangezien de ID elke "willekeurige" waarde kan hebben t.o.v. de volgorde en daarmee de volgorde in de war kan sturen.
Ik hoop dat duidelijk is wat mijn probleem is.