MySql的最后一条记录由group_item_id和按日期排序

时间:2019-11-04 12:01:07

标签: mysql greatest-n-per-group

我的数据库表名称为分类帐,字段为 id,item_id,日期,...其他字段

我要 来自 的最后一条记录( group by item_id按日期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

你们能帮忙吗?

1 个答案:

答案 0 :(得分:2)

您可以使用相关子查询进行过滤:

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