Выберите отдельные столбцы из результата - PullRequest
0 голосов
/ 20 октября 2011

Допустим, у меня есть 3 таблицы:

  1. Авторская таблица (ID, AuthorName)
  2. Таблица жанров (ID, GenreName)
  3. Таблица книг (ID, дата, жанр, автор)

Где Жанр и Автор - это внешние ключи (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 | 04.02.11 | Действие | A |
| 2 | 7/7/11 | Ужас | Б |
| 3 | 18/8/11 | Действие | A |
| 4 | 3/10/11 | Комедии | C |
| 5 | 16/7/11 | Ужас | D |
| 6 | 29.07.11 | Ужас | Б |
| 7 | 05.12.11 | Комедии | E |
| 8 | 13.09.11 | Комедии | C |

Но это не тот реальный результат, который мне нужен.

Может ли кто-нибудь помочь мне выбрать запрос, чтобы отличить жанр столбца и автора от книг и последнюю дату, чтобы получить этот результат ниже?


| ID | Дата | Жанр | Автор |
---------------------------------
| 3 | 18/8/11 | Действие | A |
| 4 | 3/10/11 | Комедии | C |
| 5 | 16/7/11 | Ужас | D |
| 6 | 29.07.11 | Ужас | Б |
| 7 | 05.12.11 | Комедии | E |

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Я наконец нашел ошибку! Просто редактирование здесь и там от ответа Андрея. Это мой текущий синтаксис для получения результата:

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

0 голосов
/ 20 октября 2011

Я был в некоторой степени безопасен, предполагая, что имена авторов / имена жанров могут быть одинаковыми, поэтому он использует идентификаторы для поиска соответствующих записей в записях макс.

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;

Подзапрос получает список максимальных дат для комбинации жанра / автора, а затем сопоставляет его с исходными записями книги, чтобы подобрать идентификатор книги в исходной записи. Вы должны сделать это, так как вы не можете просто максимизировать идентификатор и максимизировать дату и предположить, что максимальные значения находятся в одной строке.

...