带GROUP BY和条件的SQL查询

用户名

我有一个带有contract的“股市”数据表我想获取交易量(每天执行的交易数量)和收盘价,收盘价是该交易日最后记录的合约价格。

CREATE TABLE IF NOT EXISTS `contracts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `price` decimal(5,2) NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1502 ;

我可以通过执行以下查询来获取所需的数据(大部分是!):

SELECT count(id) as volume, price, DATE(created_at) FROM `contracts` 
GROUP BY DATE(created_at)

但是,我想要收盘价-返回的价格是ID恰好在最后的任何记录的价格。有没有办法获取price设置的最后一个created_at

用户名

一种解决方案是使用子查询来获取该价格

SELECT count(ctr.id) as volume, 
    (SELECT cc.price
        FROM contracts as cc 
        WHERE DATE(cc.created_at) = DATE(ctr.created_at)
        ORDER BY cc.created_at DESC
        LIMIT 1) as price, 
    DATE(ctr.created_at) 
FROM `contracts` as ctr
GROUP BY DATE(ctr.created_at)

编辑:更改查询以使用LIMIT并选择价格。我用过,ODER BY DESC因为它将获得具有最新日期的行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章