繁体   English   中英

每组具有聚合列的SQL最新记录

[英]SQL latest record per group with an aggregated column

我有一个类似于这样的表:

STOCK_ID TRADE_TIME   PRICE     VOLUME  
123         1           5         100  
123         2           6         150  
456         1           7         200  
456         2           8         250

对于每个股票我想获得最新价格(最新的只是最大交易时间)和汇总交易量,所以对于上表我想看到:

123  6 250  
456  8 450 

我刚刚发现当前查询没有(总是)工作,即无法保证所选价格始终是最新的:

select stock_id, price, sum(volume) group by stock_id

这可能没有子查询吗? 谢谢!

因为你没有指定你正在使用的数据库这里有一些通用的SQL可以做你想要的。

SELECT
  b.stock_id,
  b.trade_time,
  b.price,
  a.sumVolume
FROM (SELECT
        stock_id, 
        max(trade_time) AS maxtime,
        sum(volume) as sumVolume
      FROM stocktable
      GROUP BY stock_id) a
INNER JOIN stocktable b
  ON b.stock_id = a.stock_id and b.trade_time = a.maxtime

在SQL Server 2005及更高版本中,您可以使用CTE(公用表表达式)来获取您要查找的内容:

;WITH MaxStocks AS
(
    SELECT
        stock_id, price, tradetime, volume,
        ROW_NUMBER() OVER(PARTITION BY stock_ID ORDER BY TradeTime DESC) 'RowNo'
    FROM    
        @stocks
)
SELECT
    m.StockID, m.Price, 
    (SELECT SUM(VOLUME) 
     FROM maxStocks m2 
     WHERE m2.STock_ID = m.Stock_ID) AS 'TotalVolume'
FROM maxStocks m
WHERE rowno = 1

既然你想要每笔股票的最后交易以及所有交易的交易量,我看不出你如何在没有子查询的情况下做到这一点,但....

声明@Stock表(STOCK_ID int,TRADE_TIME int,PRICE int,VOLUME int)

插入@Stock值(123,1,5,100),(123,2,6,150),(456,1,7,200),(456,2,8,250)

选择Stock_ID,价格,(从@Stock B中选择总和(体积),其中B.Stock_ID = A.Stock_ID)来自@Stock A的交易量,其中A.Trade_Time =(从@Stock选择最大(交易时间))

  select a.stock_id, b.price , sum(a.volume) from tablename a
       join (select stock_id, max(trade_time), price from tablename
             group by stock_id) b 
             on a.stock_id = b.stock_id
    group by stock_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM