TSQL Compare 2 выберите результат и вернет результат с самой последней датой - PullRequest
0 голосов
/ 11 июля 2011

Интересно, кто-нибудь может дать мне быструю руку?У меня есть 2 запроса на выборку (как показано ниже), и я хочу сравнить результаты обоих и вернуть только тот результат, который имеет самую последнюю дату.

Итак, у меня есть следующие 2 результата из запросов:

---------  ----------  -----------------------  ---------------  ------  --
COMPANY A  EMPLOYEE A  2007-10-16 17:10:21.000  E-mail 6D29D6D5  SYSTEM  1
COMPANY A  EMPLOYEE A  2007-10-15 17:10:21.000  E-mail 6D29D6D5  SYSTEM  1

Я хочу вернуть результат только с самой последней датой (поэтому с первой).Я думал о том, чтобы поместить результаты во временную таблицу, а затем запросить их, но мне просто интересно, есть ли более простой и эффективный способ?

SELECT * FROM (
    SELECT fc.accountidname, fc.owneridname, fap.actualend, fap.activitytypecodename, fap.createdby, fap.createdbyname,
    ROW_NUMBER() OVER (PARTITION BY fc.accountidname ORDER BY fap.actualend DESC) AS RN 
    FROM FilteredContact fc
    INNER JOIN FilteredActivityPointer fap ON fc.parentcustomerid = fap.regardingobjectid
    WHERE fc.statecodename = 'Active' 
        AND fap.ownerid = '0F995BDC' 
        AND fap.createdon < getdate()
) tmp WHERE RN = 1

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,
    ROW_NUMBER() OVER (PARTITION BY fa.name ORDER BY fap.actualend DESC) AS RN 
    FROM FilteredAccount fa 
    INNER JOIN FilteredActivityPointer fap ON fa.accountid = fap.regardingobjectid 
    WHERE fa.statecodename = 'Active' 
        AND fap.ownerid = '0F995BDC' 
        AND fap.createdon < getdate()
) tmp2 WHERE RN = 1

Ответы [ 2 ]

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

Вы должны GROUP BY и использовать MAX (созданный на)

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

если таблицы имеют одинаковую структуру (количество столбцов и типы столбцов для сопоставления), вы можете просто объединить результаты двух запросов, затем упорядочить по дате desc и затем выбрать верхнюю 1.

select top 1 * from
(
   -- your first query
union all
   -- your second query.
) T
order by YourDateColumn1 desc
...