mysql第一记录检索

mysql第一记录检索,mysql,sql,Mysql,Sql,虽然在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 B

虽然在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
我想提取asc时间顺序中每个人的第一条记录。 在对表进行升序排序之后,我需要按名称提取第一条唯一记录

因此,输出将是:

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中是否可行?

我认为

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

在数据库中,确实没有“第一个”或“最后一个”记录;将每条记录视为表中自己的非位置实体。他们唯一的位置是当你给他们一个位置时,比如说,使用
orderby

这会给你你想要的。它可能效率不高,但确实有效

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\u subquery\u name
只是子查询的虚拟名称。MySQL将给出错误1248(42000):没有别名,每个派生表都必须有自己的别名


如果只有
GROUP BY
ORDER BY
是通信操作,那么这就不必是子查询。

您需要执行GROUPBISE max或GROUPBISE min

有关示例,请参见下文或

 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;

听起来不错,但不起作用。我早就试过了。此外,group by name必须位于语法的order部分之前。一张唱片被抽出来了,我认为这是表格中的第一张。感谢您的快速响应。您需要执行groupwise max或groupwise min!!这看起来很有效。请注意,关键字“asc”也应添加在日期之后。“MyTable\u subquery\u name”表示什么?@Sammy-MyTable\u subquery\u name只是子查询的名称。MySQL将给出错误
error 1248(42000):每个派生表都必须有自己的别名
,如果没有别名,
Sue 2010-09-01 09:07:21 1000
不是输出的第一行吗,因为这是最早的时间?或者您想按
日期
时间
订购吗?然而,那将是苏2010-06-2413:23:451000,仍然不是约翰,不是吗?