mysql组最大值行数

mysql组最大值行数,mysql,group-by,aggregate-functions,Mysql,Group By,Aggregate Functions,我有这张桌子: - 一个有效的解决办法似乎是: - 我想知道这是否是一个可靠的解决方案,是否有其他更优雅的方式来做到这一点 谢谢大家! 这是另一种方式,但正如你所看到的,有一个联系: select id, entity_id, value, `date` from gmd x join (select entity_id, max(date) as `date` from gmd group by entity_id) y using (entity_id, `date`) 小提琴:

我有这张桌子: -

一个有效的解决办法似乎是: -

我想知道这是否是一个可靠的解决方案,是否有其他更优雅的方式来做到这一点


谢谢大家!

这是另一种方式,但正如你所看到的,有一个联系:

select id, entity_id, value, `date`
  from gmd x
  join (select entity_id, max(date) as `date` from gmd group by entity_id) y
 using (entity_id, `date`)
小提琴:

在“工作”查询中,将为值字段选择任意随机值,因为它不在GROUPBY子句中。在大多数其他数据库(MySQL除外)中,这将返回语法错误

如果您不希望在同一实体的两个值_id和日期之间出现平局时同时返回两个值,您希望如何决定返回哪个值

根据评论进行编辑- 如果希望插入“最后”行,则需要某种方法来确定超出日期的订单。假设id字段随时间上升,您可以通过以下方式加入每个实体的最大id\u id:

select id, entity_id, value, `date`
  from gmd x
  join (select entity_id, max(id) as id from gmd group by entity_id) y
 using (entity_id, id)

Fiddle:

如果您始终希望获得具有最高id的值(如果它们具有相同的日期),则可以尝试此操作:


这是两个相同日期的.

和?显示每个实体的两条记录?用一些数据更改检查第二个查询结果@初学者,我明白你的意思,但在这种情况下,结果仍然可以,因为两个日期都相等。尽管可以与第二个值进行比较,并且该值可以是最高ID。@SerbuFlorin Adrian在这种情况下,请参阅我的帖子。假设对于同一个实体ID,有两个日期相等的情况,我可以选择最后插入的日期。但您的查询似乎更“了解”这一点,在这种情况下,它会返回两个值,这可能很有用。我想在“工作”查询中,您指的是第一个非工作查询。对的谢谢你只发布了两个查询,你说第一个是错误的,第二个是有效的。我指的是第二个。但是,它们都有一个group by子句,该子句排除select列表中的列,尽管集合函数位于select列表中,因此它们都存在“选择任意行”问题,并且都会在除MySQL之外的任何数据库中返回语法错误。我添加了第二个查询,假设您的id列是一个自动递增字段,则该查询应该获取“last inserted row”。事实上,这似乎是一个更好的解决方案,尽管“by last id”排序必须在内部完成,而不是在查询中指定。我的工作方案看起来好多了,谢谢!PS:你能给我一个提示,说明它为什么选择最新的ID吗?按实体分组\u ID DESC尝试删除DESC SELECT id, entity_id, value, `date` FROM gmd AS main WHERE DATE = ( SELECT MAX( `date` ) FROM gmd WHERE entity_id = main.entity_id ) GROUP BY entity_id
select id, entity_id, value, `date`
  from gmd x
  join (select entity_id, max(date) as `date` from gmd group by entity_id) y
 using (entity_id, `date`)
select id, entity_id, value, `date`
  from gmd x
  join (select entity_id, max(id) as id from gmd group by entity_id) y
 using (entity_id, id)
SELECT id, entity_id, value, 
  (SELECT MAX(`date`) FROM gmd y WHERE y.id = x.id) AS `date`
FROM  `gmd` x
GROUP BY entity_id DESC
ORDER BY id;