1

假设我有一个表,其中有一个“CDATE”代表我检索数据的日期,一个“SECID”标识我检索数据的安全性,一个“SOURCE”指定我从哪里获取数据,以及我得到的“VALUE”从源头上。我的数据可能如下所示:

CDATE   | SECID | SOURCE | VALUE
--------------------------------
1/1/2012    1       1        23
1/1/2012    1       5        45
1/1/2012    1       3        33
1/4/2012    2       5        55
1/5/2012    1       5        54
1/5/2012    1       3        99

假设我有一个如下所示的 HIERARCHY 表(具有最大 HIERARCHY 编号的“SOURCE”优先):

SOURCE  |  NAME | HIERARCHY
---------------------------
  1        ABC       10
  3        DEF        5
  5        GHI        2

现在假设我希望根据上面的层次结构选择我的结果。因此,应用层次结构并选择具有最大 HIERARCHY 编号的源,我希望得到以下结果:

 CDATE   | SECID | SOURCE | VALUE
---------------------------------
1/1/2012    1       1        23
1/4/2012    2       5        55
1/5/2012    1       3        99
4

2 回答 2

2

这将加入您的层次结构,并为每个日期和证券选择排名最高的来源。

SELECT CDATE, SECID, SOURCE, VALUE
FROM (
  SELECT t.CDATE, t.SECID, t.SOURCE, t.VALUE,
    ROW_NUMBER() OVER (PARTITION BY t.CDATE, t.SECID
                       ORDER BY h.HIERARCHY DESC) as nRow
  FROM table1 t
  INNER JOIN table2 h ON h.SOURCE = t.SOURCE
) A
WHERE nRow = 1
于 2012-06-06T19:41:08.973 回答
1

您可以通过以下方式获得您想要的结果。它将您的数据与您的层次结构相结合,并根据最高层次结构对它们进行排名。如果您在同一日期有重复的来源,这只会任意返回一个结果。

;with rankMyData as (
    select
        d.CDATE
    ,   d.SECID
    ,   d.SOURCE
    ,   d.VALUE
    ,   row_number() over(partition by d.CDate, d.SECID order by h.HIERARCHY desc) as ranking
    from DATA d
      inner join HIERARCHY h
        on h.source = d.source
)
SELECT
    CDATE
,   SECID
,   SOURCE
,   VALUE
FROM rankMyData
where ranking = 1
于 2012-06-06T19:42:50.280 回答