【问题标题】:SQL Server Join Queries using Rank and Partition使用等级和分区的 SQL Server 连接查询
【发布时间】:2016-10-25 19:46:05
【问题描述】:

我想要一个表,其中包含数据库中每个 EntityCode 的最高 BID 和最低 ASK(价格)。

以下两组代码返回两个结果集,但我还无法找到/弄清楚如何加入它们:

获得最高出价

(SELECT *   FROM    
   (SELECT 
        Contracts.Orders2Buy.EntityCode,
        Contracts.Orders2Buy.Bid,       
        Contracts.Orders2Buy.NumContractsStillAvailable,
        Contracts.Orders2Buy.TimePlaced,
        RANK() OVER (PARTITION BY EntityCode  
               ORDER BY Contracts.Orders2Buy.Bid DESC, 
               Contracts.Orders2Buy.TimePlaced DESC) AS Rank
    FROM
        Contracts.Orders2Buy
    WHERE
        Contracts.Orders2Buy.NumContractsStillAvailable > 0) AS temp
WHERE temp.Rank = 1)

获得最低要价

(SELECT *   FROM    
(   SELECT 
        Contracts.Orders2Sell.EntityCode,
        Contracts.Orders2Sell.Ask,          
        Contracts.Orders2Sell.NumContractsStillAvailable AS AskVolume,
        Contracts.Orders2Sell.TimePlaced,
        RANK () OVER (  PARTITION BY EntityCode     
                ORDER BY    Contracts.Orders2Sell.Ask ASC, 
                Contracts.Orders2Sell.TimePlaced DESC) AS Rank
    FROM
        Contracts.Orders2Sell
    WHERE
        Contracts.Orders2Sell.NumContractsStillAvailable > 0) AS temp2
WHERE temp2.Rank = 1)

【问题讨论】:

  • 这篇文章从 cte vs table variable performance 变成了 sql server cost vs web server cost?
  • 我的建议 1) 问一个具体的问题。 2)发布您的相关代码。
  • 谢谢,我还是这个论坛的新手。

标签: sql-server rank partition


【解决方案1】:

使用 JOIN 代替 UNION,将三个结果集合并为一个结果。

SELECT  *
FROM    highestBid hb
        JOIN lowestAsk la ON hb.stock_symbol = la.stock_symbol
        JOIN mostRecent mr ON la.stock_symbol = mr.stock_symbol

将每个集合中您需要的字段替换为*

【讨论】:

    【解决方案2】:

    我想要完成的需要如下加入上面的代码块:

    SELECT * FROM 
    
          (Code block 1) t1
    
    INNER JOIN
    
          (Code block 2) t2
    
    ON t1.EntityCode = t2.EntityCode
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2016-03-25
      • 1970-01-01
      相关资源
      最近更新 更多