mysql-使用max()获取正确的列值
我有两张表,mysql-使用max()获取正确的列值,mysql,max,Mysql,Max,我有两张表,项目和价格 prices表保存item表中每个项目的价格。在prices表中有一个名为counter的额外字段,该字段定期存储并递增一。因此,对于每个计数器,价格表中将有一组N行,其中N是项目表中的项目数 CREATE TABLE `item` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`
项目
和价格
prices
表保存item
表中每个项目的价格。在prices表中有一个名为counter
的额外字段,该字段定期存储并递增一。因此,对于每个计数器,价格表中将有一组N行,其中N是项目表中的项目数
CREATE TABLE `item` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
)
CREATE TABLE `prices` (
`id` bigint(9) NOT NULL AUTO_INCREMENT,
`price` float(10,2) NOT NULL,
`ts` datetime NOT NULL,
`counter` int(10) unsigned DEFAULT NULL,
`item_id` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ts` (`ts`),
KEY `counter` (`item_id`,`counter`) USING BTREE
) ENGINE=InnoDB
现在,我需要找出每件商品对应的价格的最大值——在任何一天——以及计数器值
任何商品都可能有多行具有相同的价格-需要选择第一个匹配项
我尝试了以下查询
SELECT p.id, p.counter, max.price
FROM prices AS p
JOIN (
SELECT item_id, MAX( price ) as price
FROM prices
WHERE ts
BETWEEN '2017-07-28 00:00:00'
AND '2017-07-28 23:59:59'
GROUP BY item_id
)
max
ON max.item_id = p.item_id
and p.price= max.price
这并没有给出期望的结果
如何更正我的查询
谢谢
编辑-样本数据
需要获得以下输出
id, item_id, price, counter
22598 1 19.75 150
7460 2 30.90 50
30152 3 26.20 200
ps:暂时忽略的时间戳 您不应该进行连接,只需尝试子选择,即:
SELECT p.id, p.counter, p.max_price FROM
(SELECT item_id, MAX( price ) as max_price
FROM prices
WHERE ts
BETWEEN '2017-07-28 00:00:00'
AND '2017-07-28 23:59:59'
GROUP BY item_id) AS p;
这不会给出期望的结果。
。。。你们目前的产量是多少?它是怎么错的?顺便说一句,价格浮动的可能性很小。这就是发明十进制的原因。请查找添加的样本数据和预期输出。我认为这不会产生与OP已有结果不同的结果。哦,我明白了,我认为问题在于按项目分组\u id
,它将忽略最大值(价格)只取它找到的第一个合适的值,也许……让我们等待OP向我们展示一些数据。
SELECT p.id, p.counter, p.max_price FROM
(SELECT item_id, MAX( price ) as max_price
FROM prices
WHERE ts
BETWEEN '2017-07-28 00:00:00'
AND '2017-07-28 23:59:59'
GROUP BY item_id) AS p;