Получить новейшие добавленные записи в базе данных - PullRequest
1 голос
/ 08 февраля 2012

Я могу описать вопрос только примером. Если у меня есть эти данные

    use-id         user-name          add-date
---------------------------------------------------
    2              sami               17/1/2011
    2              sami               18/1/2011
    3              alaa               18/1/2011
    4              jamal              19/1/2011

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

    use-id         user-name          add-date
---------------------------------------------------
    2              sami               18/1/2011
    3              alaa               18/1/2011
    4              jamal              19/1/2011

для каждого уникального идентификатора пользователя, я хочу получить самую новую добавленную запись. как?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Как я вижу User-Id определяет User-Name (User-Id --> User-Name). Это означает, что не будет двух равных User-Id с разными User-Name с. И ваши данные ясно показывают это с User-Id номер 2, которые оба имеют одинаковые User-Name (sami).

Так что было бы правильно сделать более простой и эффективный запрос:

select user-id, user-name, max(add-date) from table1
group by user-id, user-name

Примечание: MySql также позволяет вам удалить user-name из группы с помощью

Теперь, очевидно, вашему столу не хватает Нормализации . Ваша таблица должна выглядеть так:

YourTable(User-Id, Add-Date)

И у вас должна быть еще одна таблица Users, которая должна выглядеть так:

Users(User-Id, User-Name)

И чтобы получить ожидаемый результат в этой новой схеме, вам нужно объединить обе таблицы.

0 голосов
/ 08 февраля 2012

Одним из способов является получение даты самой новой записи для каждого пользователя:

select `use-id`, max(`add-date`) as `latest` 
from <table_name> 
group by `use-id`

Мы назовем этот запрос newest_records и используем его для выбора только тех строк, которые имеют самую последнюю дату:

select a.*
from <table_name>
inner join newest_records b
on a.`use-id` = b.`use-id` and a.`add-date` = b.`latest`

Редактировать:

Собрав все вместе (скопировать / вставить), мы получим:

select a.*
from <table_name>
inner join (  
  select `use-id`, max(`add-date`) as `latest` 
  from <table_name> 
  group by `use-id`) b
on a.`use-id` = b.`use-id` and a.`add-date` = b.`latest`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...