假设我有3张桌子:
其中流派和作者是流派和作者表的外键(ID)。
我在这里使用:
Select Books.ID, Books.Date, Genre.GenreName, Author.AuthorName
From Books, Genre, Author
Where Books.Genre = Genre.ID
AND Books.Author = Author.ID
Order By Books.ID Desc;
得到这个结果:
| ID |日期|类型|作者|
---------------------------------
| 1 | 4/2/11 |行动| A |
| 2 | 7/7/11 |恐怖| B |
| 3 | 18/8/11 |行动| A |
| 4 | 3/10/11 |喜剧| C |
| 5 | 16/7/11 |恐怖| D |
| 6 | 29/7/11 |恐怖| B |
| 7 | 12/5/11 |喜剧| E |
| 8 | 13/9/11 |喜剧| C |
但这不是我需要的实际结果。
任何人都可以帮我查看不同的Column Genre和书籍作者的选择查询以及最新日期以获得此结果吗?
| ID |日期|类型|作者|
---------------------------------
| 3 | 18/8/11 |行动| A |
| 4 | 3/10/11 |喜剧| C |
| 5 | 16/7/11 |恐怖| D |
| 6 | 29/7/11 |恐怖| B |
| 7 | 12/5/11 |喜剧| E |
答案 0 :(得分:0)
通过假设作者姓名/流派名称可以相同,我有点安全,因此它使用ID来定位最大日期子选择记录的相应记录。
Select
books.id
, MaxDates.MaxDate
, Genre.GenreName
, Author.AuthorName
from books
inner join Genre on Books.Genre=Genre.ID
inner join Author on Books.Author=Author.ID
inner join
(
Select
max(Books.Date) as MaxDate
, Genre as GenreID
, Author as AuthorID
From Books
group by Books.Genre, Books.Author
) maxDates on Author.ID = MaxDates.AuthorID and Genre.ID = MaxDates.GenreID and Books.Date = MaxDates.MaxDate
Order By Books.ID Desc;
子查询获取每个流派/作者组合的最大日期列表,然后将其与原始书籍记录匹配以获取原始记录中的书籍ID。你需要这样做,因为你不能只是最大id和最大日期,并假设最大值来自同一行。
答案 1 :(得分:0)
我终于找到了错误!只需在安德鲁的回答中进行编辑。 这是我目前获得结果的语法:
Select Books.ID, MaxDates.MaxDate, Genre.GenreName, Author.AuthorName
from (( Books INNER JOIN Genre ON Books.Genre=Genre.ID) inner join
Author ON Books.Author=Author.ID)
INNER JOIN (Select Max(Books.BookDate) as MaxDate
From Books
group by Books.Genre, Books.Author) MaxDates
on Books.BookDate = MaxDates.MaxDate
Order By Books.ID Asc;
非常感谢安德鲁! XD