mysql поиск первой записи - PullRequest
0 голосов
/ 23 мая 2010

Хотя это очень легко сделать в Perl или PHP, я не могу понять, как использовать mysql только для извлечения первого уникального вхождения записи.

Например, с учетом следующей таблицы:

Name   Date         Time          Sale
John   2010-09-12   10:22:22      500
Bill   2010-08-12   09:22:37      2000
John   2010-09-13   10:22:22      500
Sue    2010-09-01   09:07:21      1000
Bill   2010-07-25   11:23:23      2000
Sue    2010-06-24   13:23:45      1000

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

Таким образом, вывод будет:

Name   Date         Time          Sale
John   2010-09-12   10:22:22      500
Bill   2010-07-25   11:23:23      2000
Sue    2010-06-24   13:23:45      1000

Это легко сделать с помощью MySQL

Ответы [ 3 ]

1 голос
/ 23 мая 2010

Я думаю, что-то вроде

select name, date, time, sale from mytable order by date, time group by name;

даст вам то, что вы ищете

0 голосов
/ 23 мая 2010

необходимо выполнить групповой максимум или групповой минимум

см. Ниже или http://pastie.org/973117 для примера

 select
  u.user_id,
  u.username,
  latest.comment_id
 from
  users u
 left outer join
 (
  select
   max(comment_id) as comment_id,
   user_id
 from
  user_comment
 group by
  user_id
 ) latest on u.user_id = latest.user_id;
0 голосов
/ 23 мая 2010

В базах данных действительно нет «первой» или «последней» записи; Думайте о каждой записи как о своей собственной непозиционной сущности в таблице. Единственные позиции, которые они имеют, это когда вы даете им одну, скажем, используя ORDER BY.

Это даст вам то, что вы хотите. Это может быть неэффективно, но работает.

select Name, Date, Time, Sale from
    (select Name, Date, Time, Sale from MyTable
        order by Date asc, Time asc) MyTable_subquery_name
group by Name

Примечание: MyTable_subquery_name - просто фиктивное имя для подзапроса. MySQL выдаст ошибку ERROR 1248 (42000): Every derived table must have its own alias без нее.

Если бы только GROUP BY и ORDER BY были коммуникативными операциями, то это не было бы подзапросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...