有表 a:id, order_col1, order_col2
原本的查询是单个 id 去查询 select * from a where id=:id order by order_col1 desc, order_col2 desc limit 1
现在想把上面的语句改成批量 id 的 in 查询,类型于 select * from a where id in (:idList) 这样,但问题是如何保证根据每个 id 查到符合 order by ... limit 1 的数据。
谢谢。
1
sun1991 2018-03-19 16:54:46 +08:00 1
随便写了一下, 大概是这样的:
``` with t as( select id, order_col1, order_col2, row_number() over (partition by id order by order_col1 desc, order_col2 desc) as seq from a where id in (:idList) ) select id, order_col1, order_col2 from t where seq = 1; ``` 不知道你用的什么数据库, row_number 只有 Oracle 和 SqlServer 有, MySQL 好像不支持. |
3
gbin 2018-03-19 20:55:39 +08:00 via Android
分组行不?
select * from a where id in (:idList) group by id order by order_col1 desc, order_col2 desc limit 1 |
4
panpanpan 2018-03-19 21:01:17 +08:00 via iPhone
搜一下 Mysql 开窗函数。楼上的方法不错不过 mysql 不能用
|