Ik heb twee tabellen: UserStories en UserStoriesHistory. Een record in UserStories kan nul of meer records hebben in UserStoriesHistory. UserStoriesHistory bevat een overzicht van de statuswijzigingen van een userstory. Met een left outer join wil ik de laatste status er ook bij uit trekken.
Dit is wat ik tot nu toe heb:
"SELECT UserStories.UserStoryId, MAX(UserStories.Title), MAX(UserStories.Effort), MAX(UserStories.BusinessValue), MAX(UserStories.Priority), MAX(UserStoriesHistory.ADDED), LAST(UserStoriesHistory.StatusId) "+
"FROM "+
"UserStories LEFT OUTER JOIN UserStoriesHistory ON UserStories.UserStoryId = UserStoriesHistory.UserStoryId "+
"WHERE UserStories.ProjectId = "+iProject+" "+
"AND UserStories.Priority IS NOT NULL "+
"AND (UserStories.IterationId IS NULL OR UserStories.IterationId >= "+limitIter+") "+
"AND UserStories.DELETED IS NULL "+
"GROUP BY UserStories.UserStoryId "+
"ORDER BY MAX(UserStories.Priority) ASC";
Probleem is dat de resultaten onbetrouwbaar zijn; meestal gaat het goed, maar soms wordt gewoon de verkeerde status teruggegeven. Dit komt (ws) doordat in de GROUP BY op zowel MAX(UserStoriesHistory.ADDED) als LAST(UserStoriesHistory.StatusId) gefilterd wordt. Maar ik moet een aggregate functie gebruiken voor alle velden, dus ook voor StatusId. Een subquery om de laatste ADDED te krijgen gaat ook niet werken omdat daar gefilterd moet worden op de actuele UserStoryId.
Als alternatief kan ik eerst gegevens uit UserStories halen, en vervolgens voor elke record de status ophalen. Dat was ook mijn eerste implementatie, maar bij grote lijsten is dit zoveel sneller.
De database is btw MS Access. Kan iemand mij helpen?
Dit is wat ik tot nu toe heb:
"SELECT UserStories.UserStoryId, MAX(UserStories.Title), MAX(UserStories.Effort), MAX(UserStories.BusinessValue), MAX(UserStories.Priority), MAX(UserStoriesHistory.ADDED), LAST(UserStoriesHistory.StatusId) "+
"FROM "+
"UserStories LEFT OUTER JOIN UserStoriesHistory ON UserStories.UserStoryId = UserStoriesHistory.UserStoryId "+
"WHERE UserStories.ProjectId = "+iProject+" "+
"AND UserStories.Priority IS NOT NULL "+
"AND (UserStories.IterationId IS NULL OR UserStories.IterationId >= "+limitIter+") "+
"AND UserStories.DELETED IS NULL "+
"GROUP BY UserStories.UserStoryId "+
"ORDER BY MAX(UserStories.Priority) ASC";
Probleem is dat de resultaten onbetrouwbaar zijn; meestal gaat het goed, maar soms wordt gewoon de verkeerde status teruggegeven. Dit komt (ws) doordat in de GROUP BY op zowel MAX(UserStoriesHistory.ADDED) als LAST(UserStoriesHistory.StatusId) gefilterd wordt. Maar ik moet een aggregate functie gebruiken voor alle velden, dus ook voor StatusId. Een subquery om de laatste ADDED te krijgen gaat ook niet werken omdat daar gefilterd moet worden op de actuele UserStoryId.
Als alternatief kan ik eerst gegevens uit UserStories halen, en vervolgens voor elke record de status ophalen. Dat was ook mijn eerste implementatie, maar bij grote lijsten is dit zoveel sneller.
De database is btw MS Access. Kan iemand mij helpen?