Domanda

Ho una domanda in cui voglio ottenere una descrizione distinta dal termine ultimo entrato e le descrizioni ID. Posso ottenere la parte disctinct ma io incorrere in problemi con il tentativo di ottenere l'ID dal im utilizzando MAX alla data. Ecco la domanda:

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

Sono sicuro che la sua semplice ma im non vederlo.

È stato utile?

Soluzione

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

Altri suggerimenti

I doni't vedo un motivo per il join al [Caso] tavolo, così ho lasciato che fuori. È possibile aggiungere di nuovo se ne avete bisogno per qualche motivo.

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

Questo non può agire come sperato se ci sono valori DateReferred identici per lo stesso ResourceID nei dati. Si dovrebbe venire con una regola di business per quella situazione e modificare la query in modo appropriato per questo. Inoltre, questo agirà leggermente diversa dalla query se non è garantito che si dispone di righe corrispondenti nelle tabelle di valutazione, piano, e caso per il vostro file AssessmentXResource. È possibile farlo funzionare con l'aggiunta in si unisce a ARQ2 per quelli, ma che interesseranno le prestazioni ed è anche un po 'più complessa. Se avete bisogno che poi inviare un commento e posso modificare la query di gestirlo o forse si può capire da soli.

Risposta breve: max lavoro funzione di solito se si esegue il raggruppamento da IDS. Si finirà per restituire il valore massimo per ogni ID distinti. vale a dire tutto ciò che

Potrebbe essere necessario modificare la rappresentazione sottoquery, ma si ottiene l'idea.

select id, val da tavolo dove val = (selezionare max (val) dalla tabella)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top