2010-07-12 7 views
0

Ceci est une suite de ce question. J'ai travaillé tout le week-end sur ce problème sans le résoudre. Je suis totalement perplexe. Essentiellement, j'ai hérité d'une structure de table intéressante. Cette structure de la table se présente comme suit:Obtenir les enregistrements les plus récents entre 2 tables

GroupTable

* ID 
* Name 
* Description 

GroupItem

* ID 
* GroupID 
* Name 
* CreatedBy 
* CreationDate 

OpenGroupItem

* ID 
* GroupID 
* Name 
* CreatedBy 
* CreationDate 

Je dois obtenir les trois éléments de GroupItem les plus récents créés par un particulier utilisateur. La torsion vient avec un besoin associé au GroupID. Les trois éléments GroupItem que je récupère doivent avoir au moins un autre élément GroupItem avec le même GroupID. La deuxième torsion est que les autres éléments du groupe peuvent être dans OpenGroupItem. En d'autres termes, j'essaie de récupérer les trois GroupTables les plus récents qui ont au moins deux éléments dans le groupe. Les éléments peuvent être dans GroupItem ou OpenGroupItem. Le problème est qu'au moins un des éléments doit avoir été créé par un utilisateur spécifique.

Je n'ai aucune idée de comment accomplir cela en SQL. J'utilise SQL Server 2008 et je n'arrête pas.

+1

Si vous voulez commencer une nouvelle question, vous pouvez accepter l'une des réponses de votre autre question afin que nous sachions dans quelle direction vous allez (en plus, c'est juste poli). Sinon, changez votre question précédente pour indiquer pourquoi ces solutions ne fonctionneront pas pour vous. –

+0

Terminé. Je n'essayais pas d'être impoli. Juste concentré sur le problème à portée de main :) – user336786

Répondre

0

Ma première recommandation serait de réparer votre structure de base de données. Il n'est pas nécessaire que ceux-ci soient dans deux tables avec la même structure. Une table avec un champ pour indiquer si elle est ouverte est un meilleur design. Pour éviter que les choses ne se cassent, vous nommez la table quelque chose de nouveau, puis créez une vue pour GroupItem (nommée identique à cette table) et une pour OpenGroupITem qui ne sélectionne que les enregistrements que vous voulez pour chaque champ d'onteh basé que vous avez ajouté. Vous devrez également modifier le processus qui déplace les enregistrements de statut ouvert à non ouvert si vous avez une telle chose.

Une fois cela fait, il est trivial d'interroger les données.

Si vous ne pouvez pas faire cela, la meilleure solution est de réunir toutes les deux tables ensemble, puis interroger. Si vous devez effectuer ce type de requête fréquemment, faites UNOIN ALL une vue. S'il s'agit d'une occurrence rare, faites-en une table dérivée ou CTE ou une table temporaire.

Questions connexes