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

Jam*_*esK 4 sql group-by aggregate-functions

我有一个与此类似的表:

STOCK_ID TRADE_TIME   PRICE     VOLUME  
123         1           5         100  
123         2           6         150  
456         1           7         200  
456         2           8         250
Run Code Online (Sandbox Code Playgroud)

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

123  6 250  
456  8 450 
Run Code Online (Sandbox Code Playgroud)

我刚刚发现当前查询并不(总是)有效,即不能保证所选价格始终是最新的:

select stock_id, price, sum(volume) group by stock_id
Run Code Online (Sandbox Code Playgroud)

这可以在没有子查询的情况下完成吗?谢谢!

Joh*_*ock 5

由于您没有指定您正在使用的数据库,因此这里有一些通用 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
Run Code Online (Sandbox Code Playgroud)