首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据条件从该表中只选择唯一的值?

如何根据条件从该表中只选择唯一的值?
EN

Stack Overflow用户
提问于 2021-05-22 16:48:08
回答 1查看 36关注 0票数 0

我只想从每组中选择第一条记录。所以基本上我只想要第一次处理日期列的数据,而不想要每个产品的其余日期。

我当前的代码如下

代码语言:javascript
复制
SELECT  
C.AccountID as ABN_ACC , 
C.ProductSymbol, 
C.ProductShortName, 
S.ReactorProduct  AS REC_PROD, 
C.CurrencyCode AS PROD_CCY,
C.CountryOfPayment AS PAYCONTRY,
C.DividendValueCur AS PAYCCY, 
C.DividendValue AS DIV_AMNT,
CONCAT ((IIF (C.QuantitySettledNoTax_LS = 'S' ,(-1*C.QuantitySettledNoTax),C.QuantitySettledNoTax )),(IIF(C.QuantitySettledTax_LS = 'S',(-1*C.QuantitySettledTax),QuantitySettledTax))) AS DIVQTY ,
C.ExdividendDate AS EXDATE, 
C.Recorddate AS RECDATE, 
C.DividendPayDate AS PAYDATE
From "LiquidCDW". [Staging].[CA_CorporateActions] AS C
RIGHT JOIN "LiquidCDW".[Staging].[POS_SettledPositions] AS P ON C.Recorddate = P.ProcessingDate AND C.AccountID = p.AccountID AND C.ProductSymbol = P.ProductSymbol AND C.DividendValueCur = P.CurrencyCode 
INNER JOIN "LiquidCDW".[Transformation].[Mapping_Product_ABNReactor] AS S ON C.ProductSymbol = S.ReactorProduct AND S.ValidTo IS NULL AND S.ProductType = 'E' AND c.DividendValueCur = S.Currency 
where C.ExdividendDate >= '20210201'
ORDER by C.ProductSymbol , C.CurrencyCode 

EN

回答 1

Stack Overflow用户

发布于 2021-05-22 17:02:15

一种方法是使用ROW_NUMBER

代码语言:javascript
复制
WITH cte AS (
    SELECT
        ROW_NUMBER() OVER (PARTITION BY C.ProductSymbol ORDER BY processingDate) rn,
        C.AccountID AS ABN_ACC,
        C.ProductSymbol,
        C.ProductShortName,
        S.ReactorProduct AS REC_PROD,
        C.CurrencyCode AS PROD_CCY,
        C.CountryOfPayment AS PAYCONTRY,
        C.DividendValueCur AS PAYCCY,
        C.DividendValue AS DIV_AMNT,
        CONCAT((IIF(C.QuantitySettledNoTax_LS = 'S',
               (-1*C.QuantitySettledNoTax), C.QuantitySettledNoTax)),
               (IIF(C.QuantitySettledTax_LS = 'S',
               (-1*C.QuantitySettledTax),QuantitySettledTax))) AS DIVQTY,
        C.ExdividendDate AS EXDATE,
        C.Recorddate AS RECDATE,
        C.DividendPayDate AS PAYDATE
    FROM [LiquidCDW].[Staging].[CA_CorporateActions] AS C
    RIGHT JOIN "LiquidCDW".[Staging].[POS_SettledPositions] AS P
        ON C.Recorddate = P.ProcessingDate AND
           C.AccountID = p.AccountID AND
           C.ProductSymbol = P.ProductSymbol AND
           C.DividendValueCur = P.CurrencyCode 
    INNER JOIN [LiquidCDW].[Transformation].[Mapping_Product_ABNReactor] AS S
        ON C.ProductSymbol = S.ReactorProduct AND
           S.ValidTo IS NULL AND
           S.ProductType = 'E' AND
           C.DividendValueCur = S.Currency 
    WHERE
        C.ExdividendDate >= '20210201'
)

SELECT *
FROM cte
WHERE rn = 1
ORDER BY ProductSymbol, CurrencyCode;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67647637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档