mysql - MySql最后一条记录按item_id分组,按日期排序
问题描述
我的数据库表名是 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
推荐阅读
- python - 从响应中解析时出现 Python JSON TypeError
- android - 无法使用 GoogleSignInClient.silentSignIn() 在 OkHttpClient Authenticator 中检索 id 令牌
- python - 尝试使用 Folium 时出现“AttributeError:模块 'pandas' 没有属性 'plotting'”
- python - Numpy重新分配变量不起作用
- scala - 在 Scala 中解析多部分/表单数据
- html - 如何将链接添加到 Gmail 的主题区域
- php - file_get_contents 不在服务器上工作,但在 localhost 和 allow_url_fopen 上工作
- c# - 通过按钮统一打开 PDF 文件时出错
- asp.net-mvc - Dotnet 核心——如何转换 Queryable
在下拉列表中使用 SelectList? - python - 将 ipywidgets.widgets.widget_output.Output 转换为列表