[英]MySql last record from group by item_id with order by date
My database table name is ledgers and fields are id, item_id, date, ...other fields我的数据库表名是 ledgers,字段是id、item_id、date、...其他字段
I Want the last record from ( groupBy item_id order by date ASC ).我想要来自( groupBy item_id order by date ASC )的最后一条记录。 from each group.从每个组。 I tried below query我试过下面的查询
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
Can you guys please help.你们能帮忙吗。
You can filter with a correlated subquery:您可以使用相关子查询进行过滤:
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`
)
For performance, consider an index on (item_id, date)
.为了提高性能,请考虑(item_id, date)
上的索引。
Another option is to use rank()
(available in MySQ 8.0 only):另一种选择是使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.