Как найти первую и последнюю запись из таблицы mysql
У меня есть одна таблица. Я хочу найти первую и последнюю запись, которые удовлетворяют критериям определенного месяца.
Ответы
Ответ 1
Первое и последнее значение имеют смысл только тогда, когда у вас есть вывод запроса, отсортированного по полю.
Чтобы получить первую запись:
select col1 from tab1 order by col1 asc limit 1;
Чтобы получить последнюю запись:
select col1 from tab1 order by col1 desc limit 1;
Ответ 2
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'
Это сработало для меня, когда мне нужно было выбрать первую и последнюю дату в серии событий.
Ответ 3
Как насчет чего-то типа:
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
.
Ответ 4
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);
Ответ 5
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;