2014-04-08 88 views
0

好日子比较两排

我有以下结果集返回:

financeYearEnd   FromDate ToDate  ClientPortfolioCode 
2013-12-31 00:00:00.000 2014-01-01 2014-01-31 C1 
2013-12-31 00:00:00.000 2014-01-01 2014-01-31 C2 
2012-12-31 00:00:00.000 2013-12-01 2013-12-31 C1 
2012-12-31 00:00:00.000 2013-12-01 2013-12-31 C2 

我需要做的是以下几点:

我需要比较的financeYearEnd所有的C1字段(总是只有两个),看看它们是否彼此不同

2013-12-31 00:00:00.000 2014-01-01 2014-01-31 C1 
2012-12-31 00:00:00.000 2013-12-01 2013-12-31 C1 

如所见,financeYearEnd确实不同,所以我需要将该结果作为行存储在临时表中。

这需要对所有不同ClientPortfolioCodes(总是出现在两组)

如何才能实现这一目标做?我试过select distinct .. - 没有工作。这回我的所有行

编辑 -

WITH cteCompareTopTwoYears 
AS (
    SELECT TOP (
      SELECT COUNT(*) * 2 
      FROM #ClientPortFolios 
      ) FinancialYearEnd AS financeYearEnd 
     ,FromDate 
     ,ToDate 
     ,CA.ClientPortfolioCode 
    FROM rpt.F3_fn_ClientPortfolios_CapitalAccount_IncludingYTD CA 
    WHERE (
      (
       CA.FromDate = (DATEADD(m, - 1, @FromDate)) 
       AND CA.ToDate = (DATEADD(m, - 1, @ToDate)) 
       ) 
      OR (
       CA.FromDate = @FromDate 
       AND CA.ToDate = @ToDate 
       ) 
      ) 
     AND (
      CA.ClientPortFolioCode IN (
       SELECT ClientPortfolioCode 
       FROM #ClientPortfolios 
       ) 
      ) 
    ORDER BY FromDate DESC 
    ) 
SELECT * 
FROM cteCompareTopTwoYears c 

回答

1

也许与ROW_NUMBER的帮助,例如:

WITH CTE AS 
(
    SELECT financeYearEnd, FromDate, ToDate, ClientPortfolioCode, 
      rn = row_Number() OVER (Partition By ClientPortfolioCode 
            Order By financeYearEnd ASC) 
    FROM dbo.TableName 
) 
SELECT financeYearEnd, FromDate, ToDate, ClientPortfolioCode 
FROM CTE 
WHERE rn > 1 

Demo

+0

这只是事情。我从CTE生成了这张表。现在发布。 – Eon

+0

我已经发布了CTE桌子信息被检索的地方 – Eon

+0

我的小脑子在头几分钟没有抓住分区,之后我浏览了大量书籍和在线资源。我...感到开悟。谢谢 – Eon