选择最大跟随Where子句的效果

时间:2017-09-19 02:14:32

标签: sql sql-server cursor max row-number

下面的代码,对于每个合同(其中ContractTypeID在[1,2,等]中)我想仅返回ContractPurrency ='USD'的合同的MaxPrice - 但是有652个合同(也就是返回的行) WHERE Currency ='USD'但729个合约/行没有货币条款。

我使用MAX()和ROW_NUMBER = 1失败了(以及之前尝试的Cursors和Cross Apply,它们在整个存储过程中都运行了90-120秒)并且我理解ROW_NUMBER = 1策略的问题是当最高价不是美元时,我想要的行(即以美元计的最高价格)将被编号为2 +。

如何返回所有729个结果(但最高价格=美元最高价格)? TIA

    SELECT  MeasurableID,
            EntityID,
            MAX (ContractPrice) AS HighPrice

  FROM dbo.Contracts

  WHERE Contracts.CurrencyCode IN (
       ('USD'),
       ('BTC'),
       ('INR')                    )


    AND dbo.Contracts.MeasurableID IN (
            2030,
            2017
                                    )

    GROUP BY
           dbo.Contracts.MeasurableID,
           dbo.Contracts.EntityID       
    ORDER BY
           MeasurableID,
           EntityId

2 个答案:

答案 0 :(得分:1)

您正在寻找条件聚合。这将返回所有729条记录,每条记录的最大美元价格(如果有)。

{
    /// <summary>
    /// Interaction logic for CaseUserPropertiesWindow.xaml
    /// </summary>
    public partial class CaseUserPropertiesWindow : PropertiesWindowBase
    {
        public CaseUserPropertiesWindow()
        {
            InitializeComponent();
        }
    }
}

答案 1 :(得分:0)

感谢您的回复,但在创建SQL Fiddle示例时,我意识到如果指定的货币中没有合同,那么当然不会返回任何行(我在测试数据库中播种时出错了曾经以为总有美元)。

条件聚合是有用的,但是对于不同的要求/问题而不是我正在努力。