2017-04-20 3 views
0

Je suis assez nouveau à SQL et j'espère que vous pouvez m'aider. J'essaie de récupérer des valeurs uniques de ma table en fonction de la dernière date à laquelle des utilisateurs spécifiques sont sélectionnés.Comment afficher des valeurs distinctes basées sur la date MAX dans le générateur de rapports?

Ce sont les données:

Raw Data

Et c'est ce que je cherche à atteindre:

Desired Data

J'ai essayé d'écrire 2 requêtes mais malheureusement:

Ma première requête afficherait des lignes dupliquées pour chaque entreprise:

SELECT DISTINCT FilteredAppointment.regardingobjectidname ,FilteredAppointment.owneridname ,FilteredAppointment.subject ,MAX(FilteredAppointment.scheduledstart) as Date ,FilteredAppointment.location ,FilteredCcx_member.ccx_mnemonic FROM FilteredAppointment INNER JOIN FilteredAccount ON FilteredAppointment.regardingobjectid = FilteredAccount.accountid INNER JOIN FilteredCcx_member ON FilteredAccount.accountid = FilteredCcx_member.ccx_accountid WHERE FilteredAppointment.statecodename != N'Canceled' AND FilteredAppointment.owneridname IN (N'User1', N'User2', N'User3') GROUP BY FilteredAppointment.regardingobjectidname ,FilteredAppointment.owneridname ,FilteredAppointment.subject ,FilteredAppointment.scheduledstart ,FilteredAppointment.location ,FilteredCcx_member.ccx_mnemonic ORDER BY FilteredAppointment.regardingobjectidname 

Et ma 2ème requête afficherait une seule ligne:

SELECT DISTINCT FilteredAppointment.regardingobjectidname ,FilteredAppointment.owneridname ,FilteredAppointment.subject ,FilteredAppointment.scheduledstart ,FilteredAppointment.location ,FilteredCcx_member.ccx_mnemonic FROM FilteredAppointment INNER JOIN FilteredAccount ON FilteredAppointment.regardingobjectid = FilteredAccount.accountid INNER JOIN FilteredCcx_member ON FilteredAccount.accountid = FilteredCcx_member.ccx_accountid WHERE FilteredAppointment.scheduledstart = (SELECT MAX(FilteredAppointment.scheduledstart) FROM FilteredAppointment WHERE FilteredAppointment.regardingobjectidname = FilteredAppointment.regardingobjectidname) AND FilteredAppointment.statecodename != N'Canceled' AND FilteredAppointment.owneridname IN (N'User1', N'User2', N'User3') GROUP BY FilteredAppointment.regardingobjectidname ,FilteredAppointment.owneridname ,FilteredAppointment.subject ,FilteredAppointment.scheduledstart ,FilteredAppointment.location ,FilteredCcx_member.ccx_mnemonic ORDER BY FilteredAppointment.regardingobjectidname 

Répondre

0

j'ai réussi à résoudre le problème - Je vous remercie de l'aide à nouveau!

WITH apptmts AS (SELECT TOP 1 WITH TIES fa.scheduledstart,fa.location,fa.regardingobjectidname,mem.ccx_mnemonic,fa.owneridname,fa.subject FROM FilteredAppointment fa JOIN FilteredAccount acc on fa.regardingobjectid = acc.accountid JOIN FilteredCcx_member mem ON acc.accountid = mem.ccx_accountid WHERE fa.statecodename != N'Canceled' AND fa.owneridname IN (N'User1', N'User2', N'User3') ORDER BY ROW_NUMBER() OVER(PARTITION BY fa.regardingobjectidname ORDER BY fa.scheduledstart DESC)) SELECT * FROM apptmts ORDER BY scheduledstart DESC 
0

Essayez ceci: -

SELECT distinct a.date, a.company, a.companyID, a.User, a.Location, a.topic 
    FROM tablename a 
    inner join 
    (
    Select company, companyID, User, max(date) as recent_date 
    from 
    tablename 
    group by company, companyID, User 
    ) b 
    on a.date=b.recent_date and a.company=b.company and a.companyID=b.companyID 
    and a.User=b.User; 
+0

Salut, Merci beaucoup pour la réponse, très appréciée! Comme je l'ai dit je suis nouveau à SQL - en train d'apprendre. Il me dit colonne invalide pour l'ID de l'entreprise. J'ai dû faire une jointure avec l'ID de l'entreprise et de l'entreprise –

+0

Salut, j'ai réussi à résoudre le problème: –