我有一个表我想找到满足特定月份标准的第一个和最后一个记录。
答案 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;