TSQL比较2选择的结果和返回结果与最近的日期

时间:2011-07-11 13:42:40

标签: tsql select compare

不知道有人能给我一个快速的帮助。我有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 :(得分:0)

如果表具有相同的结构(列数和要匹配的列类型),那么您可以将两个查询的结果合并,然后按日期desc排序,然后选择前1个。

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

答案 1 :(得分:0)

你应该GROUP BY并使用MAX(createdon)