我的问题与此类似,但不完全相同。
我有一个包含大量书籍的数据库,其中一些相同书名的不同版本。我正在寻找一条 SQL 语句,它为我使用 WHERE 子句(以查找特定的丛书)提供我选择的每个标题的最高版本号。表格如下所示:
|id|title |edition|year|
|--|-------------------------|-------|----|
|01|Serie One Title One |1 |2007|
|02|Serie One Title One |2 |2008|
|03|Serie One Title One |3 |2009|
|04|Serie One Title Two |1 |2001|
|05|Serie One Title Three |1 |2008|
|06|Serie One Title Three |2 |2009|
|07|Serie One Title Three |3 |2010|
|08|Serie One Title Three |4 |2011|
|--|-------------------------|-------|----|
我正在寻找的结果是这样的:
|id|title |edition|year|
|--|-------------------------|-------|----|
|03|Serie One Title One |3 |2009|
|04|Serie One Title Two |1 |2001|
|08|Serie One Title Three |4 |2011|
|--|-------------------------|-------|----|
我得到的最接近的是使用这个语句:
select id, title, max(edition), max(year) from books where title like "serie one%" group by title;
但它返回最高版本和年份,并包括它找到的第一个 id:
|--|-----------------------|-------|----|
|01|Serie One Title One |3 |2009|
|04|Serie One Title Two |1 |2001|
|05|Serie One Title Three |4 |2011|
|--|-----------------------|-------|----|
这个花哨的连接也很接近,但没有给出正确的结果:
select b.id, b.title, b.edition, b.year from books b inner join (select name, max(edition) as maxedition from books group by title) g on b.edition = g.maxedition where b.title like "serie one%" group by title;
使用它,我得到了独特的标题,但大多是旧版本。