Question

J'ai une requête où je veux obtenir une description distincte par la dernière date d'entrée et l'ID de descriptions. Je peux obtenir la partie disctinct mais je des ennuis à essayer d'obtenir l'ID depuis im en utilisant MAX à la date. Voici la requête:

SELECT DISTINCT Resource.Description, MAX(arq.DateReferred) AS DateReferred, arq.AssessmentResourceID
FROM AssessmentXResource AS arq 
INNER JOIN Resource ON arq.ResourceID = Resource.ResourceID 
INNER JOIN Assessment AS aq 
INNER JOIN [Case] AS cq ON aq.CaseID = cq.CaseID 
INNER JOIN [Plan] AS pq ON cq.CaseID = pq.CaseID ON arq.AssessmentID = aq.AssessmentID
WHERE     (pq.PlanID = 22)
GROUP BY Resource.Description, arq.AssessmentResourceID
ORDER BY Resource.Description

Je suis sûr que son simple mais je ne suis pas le voir.

Était-ce utile?

La solution

SELECT
    Resource.Description,
    arq.DateReferred AS DateReferred,
    arq.AssessmentResourceID
FROM
    Resource
INNER JOIN
    AssessmentXResource AS arq 
        ON arq.ResourceID = Resource.ResourceID 
        AND arq.DateReferred = (
                                SELECT
                                    MAX(DateReferred)
                                FROM
                                    AssessmentXResource
                                WHERE
                                    ResourceID = Resource.ResourceID
                               )
INNER JOIN
    Assessment AS aq
        ON arq.AssessmentID = aq.AssessmentID
INNER JOIN
    [Case] AS cq
        ON aq.CaseID = cq.CaseID 
INNER JOIN
    [Plan] AS pq
        ON cq.CaseID = pq.CaseID
WHERE
    (pq.PlanID = 22)
ORDER BY
    Resource.Description

Autres conseils

Je vois doni't une raison pour la jointure à la table [cas], donc je l'ai laissé cela. Vous pouvez l'ajouter en arrière si vous en avez besoin pour une raison quelconque.

SELECT
     RES.Description,
     ARQ.DateReferred,
     ARQ.AssessmentResourceID
FROM
     AssessmentXResource ARQ
INNER JOIN Resource ON
     ARQ.ResourceID = RES.ResourceID
INNER JOIN Assessment AQ ON
     AQ.AssessmentID = ARQ.AssessmentID
INNER JOIN [Plan] PQ ON
     PQ.CaseID = AQ.CaseID
LEFT OUTER JOIN AssessmentXResource ARQ2 ON
     ARQ2.ResourceID = ARQ.ResourceID AND
     ARQ2.DateReferred > ARQ.DateReferred
WHERE
     PQ.PlanID = 22 AND
     ARQ2.ResourceID IS NULL

Cela peut ne pas agir comme si espéré il y a des valeurs identiques DateReferred pour la même ResourceID dans vos données. Vous devriez arriver à une règle d'affaires pour cette situation et changer la requête appropriée pour elle. En outre, cela agira légèrement différent de votre requête si ce n'est pas garanti que vous avez des lignes correspondant à l'évaluation, le plan et les tables cas pour vos lignes de AssessmentXResource. Vous pouvez le faire fonctionner en ajoutant dans les jointures à ARQ2 pour ceux-ci, mais qui aura une incidence sur la performance et est également un peu plus complexe. Si vous avez besoin que puis poster un commentaire et je peux modifier la requête pour le manipuler ou peut-être vous pouvez le comprendre vous-même.

Réponse courte: fonction max wont travail si vous regroupez par ids. Vous finirez par revenir la valeur maximale pour chaque identifiant distinct. dire tout

Vous devrez peut-être modifier la représentation sous-requête, mais vous voyez l'idée.

id select, val de la table où val = (choisir max (val) à partir de la table)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top