我的数据库表名称是 ledgers,字段是 id、item_id、date、...其他字段
我想要最后一条记录(groupBy item_id order by date ASC)。来自每个组。 我尝试了下面的查询
select
`id`,
`item_id`,
`date`,
`opening_quantity`,
`closing_quantity`,
`item_rate`,
`item_value`,
`previous_rate`
from `ledgers`
where date(`date`) >= ? and date(`date`) <= ?
group by `item_id`
order by `date` desc
请大家帮忙。
最佳答案
您可以使用相关子查询进行过滤:
select t.*
from `ledgers` t
where
date(t.`date`) >= ?
and date(t.`date`) <= ?
and t.`date` = (
select max(t1.`date`)
from `ledgers` t1
where t1.`item_id` = t.`item_id`
)
为了提高性能,请考虑在(item_id, date)
上建立索引。
另一个选项是使用rank()
(仅在 MySQ 8.0 中可用):
select *
from (
select
t.*,
rank() over(partition by `item_id` order by `date` desc) rn
from `ledgers` t
where date(t.`date`) >= ? and date(t.`date`) <= ?
) t
where rn = 1
关于MySql 按 item_id 分组的最后一条记录,按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58693061/