Группировка TSQL / выбор справки - PullRequest
1 голос
/ 11 июля 2011

Привет всем, интересно, может ли кто-нибудь протянуть руку; у меня есть этот скрипт tsql (показанный ниже), который в настоящее время возвращает данные на основе идентификатора владельца, если запись активна и если дата создания записи меньше, чем сегодняшняя дата. Затем я собираю данные вместе. Чего я хочу добиться, так это вернуть самую последнюю запись для каждой компании.

В настоящее время я возвращаю следующие данные:

COMPANY A   JOE BLOGS   NULL    10088   Green   NULL    NULL    21/07/2007 16:57 Phone Call
COMPANY B   JOE BLOGS   NULL    10059   Green   NULL    NULL    20/07/2007 14:57 Phone Call
COMPANY B   JOE BLOGS   NULL    10059   Green   NULL    NULL    18/07/2006 09:47    E-mail
COMPANY B   JOE BLOGS   NULL    10059   Green   NULL    NULL    19/07/2006 13:19    E-mail
COMAPANY C  JOE BLOGS   NULL    10866   Green   NULL    NULL    17/08/2007 12:57 Phone Call
COMAPANY C  JOE BLOGS   NULL    10866   Green   NULL    NULL    13/08/2007 10:59    E-mail
COMAPANY C  JOE BLOGS   NULL    10866   Green   NULL    NULL    15/08/2007 14:57    E-mail

Вот как я хочу вернуть данные:

COMPANY A   JOE BLOGS   NULL    10088   Green   NULL    NULL    21/07/2007 16:57 Phone Call
COMPANY B   JOE BLOGS   NULL    10059   Green   NULL    NULL    20/07/2007 14:57 Phone Call
COMAPANY C  JOE BLOGS   NULL    10866   Green   NULL    NULL    17/08/2007 12:57 Phone Call

Может ли кто-нибудь указать мне правильное направление, пожалуйста?

SELECT fa.name, fa.owneridname, fa.new_technicalaccountmanageridname, fa.new_customerid, fa.new_riskstatusname, 
fa.new_numberofopencases, fa.new_numberofurgentopencases, fap.actualend, fap.activitytypecodename, fap.createdby, fap.createdbyname
FROM FilteredAccount fa
INNER JOIN FilteredActivityPointer fap ON fa.accountid = fap.regardingobjectid
WHERE fa.statecodename = 'Active' 
    AND fap.ownerid = '0F995BDC'
    AND fap.createdon < getdate()

GROUP BY fa.name, fa.owneridname, fa.new_technicalaccountmanageridname, fa.new_customerid, fa.new_riskstatusname, 
fa.new_numberofopencases, fa.new_numberofurgentopencases, fap.actualend, fap.activitytypecodename, fap.createdby, fap.createdbyname

1 Ответ

0 голосов
/ 11 июля 2011

Попробуйте это

SELECT * FROM (
SELECT fa.name, fa.owneridname, fa.new_technicalaccountmanageridname, fa.new_customerid, fa.new_riskstatusname,  
fa.new_numberofopencases, fa.new_numberofurgentopencases, fap.actualend, fap.activitytypecodename, fap.createdby, fap.createdbyname ,
RN = ROW_NUMBER() OVER (PARTITION BY fa.name ORDER BY fap.createdby DESC)
FROM FilteredAccount fa 
INNER JOIN FilteredActivityPointer fap ON fa.accountid = fap.regardingobjectid 
WHERE fa.statecodename = 'Active'  
    AND fap.ownerid = '0F995BDC' 
    AND fap.createdon < getdate() 
) a WHERE RN = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...