简体   繁体   English

MySql 按 item_id 分组的最后一条记录,按日期排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM