Как найти первую и последнюю запись из таблицы 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;