mysql第一次记录检索

时间:2010-05-23 04:58:12

标签: 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
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可以轻松实现这一点吗?

3 个答案:

答案 0 :(得分:1)

我认为这就是

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

将为您提供所需的内容

答案 1 :(得分:0)

在数据库中,确实没有“第一”或“最后”记录;将每条记录视为表中自己的非位置实体。他们拥有的唯一职位是当你给他们一个时,比如使用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 BYORDER BY是通信操作,那么这不一定是子查询。

答案 2 :(得分:0)

您需要执行groupwise max或groupwise min

见下文或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;
相关问题