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;