Выберите только последний вставленный элемент, связанный с другим реестром - PullRequest
0 голосов
/ 29 апреля 2011

Я смоделировал небольшую базу данных для более простого объяснения:

CREATE TABLE bands (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(120) NULL,
  PRIMARY KEY(id)
)
TYPE=InnoDB;

CREATE TABLE albums (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  band_id INTEGER UNSIGNED NOT NULL,
  album_name VARCHAR(120) NULL,
  rating INTEGER UNSIGNED NULL,
  insertion_date TIMESTAMP NULL,
  PRIMARY KEY(id),
  INDEX albums_FKIndex1(band_id),
  FOREIGN KEY(band_id)
    REFERENCES bands(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
)
TYPE=InnoDB;

Теперь, делая вид, что у нас уже есть несколько групп и много альбомов, зарегистрированных в соответствующих таблицах, я хочу выбрать ТОЛЬКО последний вставленный альбом из каждогозарегистрированная группа.

PS: я должен использовать поле "album.insertion_date", чтобы определить, какой альбом вставлен последним.

Ответы [ 3 ]

1 голос
/ 29 апреля 2011

Попробуйте объединить две таблицы и выполнить фильтрацию по inserttion_date и band:

SELECT al.*
FROM albums al
INNER JOIN bands b ON al.band_id=b.id
WHERE al.insertion_date=(
    SELECT max(insertion_date)
    FROM albums
    WHERE band_id=b.id
)
1 голос
/ 29 апреля 2011

Попробуйте это:

select b.name, a.album_name, a.isertion_date
  from bands b, albums a
  where a.band_id = b.id
    and a.insertion_date = (select max(a1.insertion_date) from albums a1 where a1.band_id = b.id)
0 голосов
/ 29 апреля 2011

Учитывая, что у вас есть идентификаторы альбомов AUTO_INCREMENT и возможность для insertion_date NULL (так как это значение по умолчанию), использование inserttion_date для определения результатов - не самая умная вещь для делай но ... вот и все:

SELECT DISTINCT band, last_album, insertion_date
FROM (
      SELECT bands.name AS band, albums.album_name AS last_album, albums.insertion_date
      FROM bands
       JOIN albums ON bands.id=albums.band_id
      ORDER BY albums.insertion_date DESC
     ) t1
GROUP BY band;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...