Перейти к содержимому

Как взять последнюю запись из таблицы sql

  • автор:

Функция SQL LAST ()

Последняя функция () возвращает значение указанного столбца в последней записи.

SQL ПОСЛЕДНИЙ) синтаксис (

SELECT LAST(column_name) FROM table_name;

Примечание: Только поддержка MS Access Последняя функция ().

SQL Server, MySQL и Oracle в SQL ПОСЛЕДНЕГО () место для работы

Синтаксис SQL Server

SELECT TOP 1 column_name FROM table_name
ORDER BY column_name DESC;

примеров

SELECT TOP 1 name FROM Websites
ORDER BY id DESC;

синтаксис MySQL

SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;

примеров

SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

Oracle Синтаксис

SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;

примеров

SELECT name FROM Websites
ORDER BY id DESC
WHERE ROWNUM <=1;

Демонстрационная база данных

В этом уроке мы будем использовать w3big образец базы данных.

Ниже приводится выбранные «сайты» таблица данных:

+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | 本教程 | http://www.w3big.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 6 | 百度 | https://www.baidu.com/ | 4 | CN | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+

SQL LAST () примеры

Следующий SQL заявление выбрать столбец таблицы «Сайты», «название» последнего рекордного значения:

примеров

SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

реализация SQL из приведенных выше результатов, следующие:

postgresql: взять последнюю запись

id | index | desc
________________________
1 | 5 | first for 5
________________________
2 | 4 | fisrt for 4
________________________
3 | 4 | second for 4
________________________
4 | 5 | second for 5
________________________
5 | 1 | fisrt for 1
________________________
6 | 3 | fisrt for 3
________________________
7 | 3 | second for 3

Подскажите пожалуйста, как выбрать строку для последней записи для index
т.е. например, чтобы получить
________________________
4 | 5 | second for 5
________________________

Как получить последнюю запись для каждого значения определённого поля?

Хочу получить для каждого account_id последнюю запись.

Следующий запрос выдаёт ошибку:

SELECT account_id, max(date), balance FROM account_balances GROUP BY account_id;
[42000][1055] Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'core.account_balances.balance' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Я понимаю, что я запрашиваю неаггрегированое поле, но как мне иначе получить последний баланс каждого счета?

Версия mysql: 5.7.11

Настройки дефолтные. После установки ничего не менял.

  • Вопрос задан более трёх лет назад
  • 28360 просмотров

Как получить последнюю по дате запись (SQLite)?

У меня есть таблица price (id, link, name, cost, date) . В столбце name содержатся имена товаров, в столбце cost — цена на соответствующий товар. Эти цены с некоторой периодичностью добавляются в таблицу. Мне необходимо вытащить из таблицы последнюю запись конкретного товара по дате. Как я это могу сделать?

Отслеживать
задан 26 янв 2023 в 0:13
55 5 5 бронзовых знаков
order by date limit 1
26 янв 2023 в 1:49

Последняя по дате = первая по убыванию дат. Первая = limit 1 | first 1 | top 1, в зависимости от диалекта sql. По убыванию дат = order by date desc.

26 янв 2023 в 3:42

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

SELECT * FROM price WHERE name = 'product_name' ORDER BY date DESC LIMIT 1; 

запрос сначала выбирает все записи с именем товара product_name , затем сортирует их по дате в порядке убывания и возвращ. только одну посл. запись с помощью оператора LIMIT 1 .

SELECT * FROM price p1 WHERE date = (SELECT MAX(date) FROM price p2 WHERE p1.name=p2.name AND p1.name='product_name') 
SELECT * FROM (SELECT * FROM price WHERE name = 'product_name' ORDER BY date DESC) as temp_table GROUP BY name 

Еще одно решение может быть функции для вашей СУБД, например ROW_NUMBER() в SQL, DENSE_RANK() в Oracle или RANK() в MySQL.

WITH temp_table AS ( SELECT id, link, name, cost, date, ROW_NUMBER() OVER (PARTITION BY name ORDER BY date DESC) as rn FROM price ) SELECT * FROM temp_table WHERE name = 'product_name' and rn = 1; 

Предложенный мной ранее запрос с использованием оператора GROUP BY может возвращать неожиданный результат, если таблица price содержит несколько записей с одинаковым именем товара и датой, так как в этом случае неопределенно, какую из этих записей вернет запрос. Есть несколько других способов решить эту задачу. Один из них — это использование сортировки и оператора LIMIT 1 в запросе. Например:

SELECT id, link, name, cost, date FROM price WHERE name = 'product_name' ORDER BY date DESC LIMIT 1; 

Этот запрос выбирает все записи с именем товара ‘product_name’, сортирует их по дате в порядке убывания и возвращает только одну последнюю запись с помощью оператора LIMIT 1.

Другой способ — подзапрос с макс. датой:

SELECT id, link, name, cost, date 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *