虽然在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可以轻松实现这一点吗?
答案 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 BY
和ORDER 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;