我有一个带有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] 删除。
我来说两句