我的数据库表名称为分类帐,字段为 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
你们能帮忙吗?
答案 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