工作小总结

mysql分组后,取每组第一条数据

在工作中,有时候我们需要先group by之后,然后在获取group by之后的每组数据。这个时候sql怎么写呢?

在工作中,有时候我们需要先group by之后,然后在获取group by之后的每组数据。这个时候sql怎么写呢?

需求:

ef495ac5e164553778cbc8d12f6a5d7c.png

获取每本书的起始章节。比如:book_id为1的书籍的起始章节为:(1,2),book_id为2的起始章节为(1,3),这个时候怎么获取呢?

先看结论:

-- 倒叙
select * from (select distinct(a.id) tid, a.* from publish_book_chapter a
               where a.book_id in (1, 2)
              order by a.id desc) tt
group by tt.book_id;

-- 正序
select * from (select distinct(a.id) tid, a.* from publish_book_chapter a
               where a.book_id in (1, 2)
              order by a.id ) tt
group by tt.book_id;

思路:先进行排序,然后再进行分组,获取每组的第一条。


Q: 为什么要写distinct(a.id)呢?

A

原创不易,完成人机校验,阅读全文

相关推荐