如何从mysql表中查找第一个和最后一个记录

时间:2010-04-29 07:13:09

标签: mysql

我有一个表我想找到满足特定月份标准的第一个和最后一个记录。

6 个答案:

答案 0 :(得分:25)

只有在对字段进行排序的查询输出时,才能有意义。

获得第一条记录:

select col1 from tab1 order by col1 asc limit 1;

获取最后一条记录:

select col1 from tab1 order by col1 desc  limit 1;

答案 1 :(得分:19)

SELECT 
(SELECT column FROM table WHERE [condition] ORDER BY column LIMIT 1) as 'first',
(SELECT column FROM table WHERE [condition] ORDER BY column DESC LIMIT 1) as 'last'

当我需要选择事件系列中的第一个和最后一个日期时,这对我有用。

答案 2 :(得分:11)

如下:

select 'first', f1, f2, f3, f4 from tbl
    order by f1 asc, f2 asc
    limit 1
union all
select 'last', f1, f2, f3, f4 from tbl
    order by f1 desc, f2 desc
    limit 1

显然可以随意在where子句中添加您想要的任何条件,但order by的基本前提是颠倒两个select部分中的顺序。

limit子句只会在两种情况下获得第一行。这恰好是第二个select中设置的最后行,因为您已经颠倒了顺序。

如果您的条件只有一行,并且您不希望它返回两次,请使用union代替union all

答案 3 :(得分:7)

select * from table
where id = (select id from tab1 order by col1 asc limit 1) or
id = (select id from tab1 order by col1 desc  limit 1);

答案 4 :(得分:0)

试试这个:以你想根据 group_col 对你的表进行分组并获取 value_col 的第一个和最后一个值:

select substring_index(group_concat(value_col), ',',1) as 'first',
        substring_index(group_concat(value_col), ',',-1) as 'last' 
from table
group by group_col

答案 5 :(得分:-1)

SELECT * FROM (
    SELECT first_name, LENGTH(first_name) FROM Employees
    ORDER BY LENGTH(first_name) ASC
    FETCH FIRST 1 rows ONLY)
UNION
SELECT * FROM (
    SELECT first_name, LENGTH(first_name) FROM Employees
    ORDER BY LENGTH(first_name) DESC
    FETCH FIRST 1 rows ONLY)
ORDER BY 2 desc;