Как получить последнюю по дате запись (SQLite)?
У меня есть таблица price (id, link, name, cost, date) . В столбце name содержатся имена товаров, в столбце cost — цена на соответствующий товар. Эти цены с некоторой периодичностью добавляются в таблицу. Мне необходимо вытащить из таблицы последнюю запись конкретного товара по дате. Как я это могу сделать?
Отслеживать
задан 26 янв в 0:13
55 4 4 бронзовых знака
order by date limit 1
26 янв в 1:49
Последняя по дате = первая по убыванию дат. Первая = limit 1 | first 1 | top 1, в зависимости от диалекта sql. По убыванию дат = order by date desc.
26 янв в 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
Как взять последнюю запись из таблицы sql
Рассмотрим несколько примеров, как получить id последней записи в таблицах mysql.
Существует несколько способов получения последней добавленной записи.
Получение последнего добавленного id в таблице mysql — способ 1.
Делаем полную выборку из таблицы your_table с помощью оператора SELECT, используем сортирову в обратном порядке по столбцу id (ORDER BY id DESC) и оставляем одну запись (LIMIT 1), понятно что она и будет последней добавленной записью.
SELECT * FROM your_table ORDER BY id DESC LIMIT 1;
Получение последнего добавленного id в таблице mysql — способ 2.
Используем для получения последнего id вставленной строки, функцию LAST_INSERT_ID().
SELECT * FROM your_table WHERE >Это все, если кто знает еще какие-нибудь способы то пишите. Всем пока.
Как получить последнюю строку sql
Чтобы получить последнюю строку в таблице, можно воспользоваться следующей командой:
Есть что добавить? Зарегистрируетесь
Курсы по программированию на Хекслете
Backend-разработка
Разработка серверной части сайтов и веб-приложений
Frontend-разработка
Разработка внешнего интерфейса сайтов и веб-приложений и верстка
Создание сайтов
Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails
Тестирование
Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP
Аналитика данных
Сбор, анализ и интерпретация данных на Python
Интенсивные курсы
Интенсивное обучение для продолжающих
DevOps
Автоматизация настройки локального окружения и серверов, развертывания и деплоя
Веб-разработка
Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков
Математика для программистов
Обучение разделам математики, которые будут полезны при изучении программирования
JavaScript
Разработка сайтов и веб-приложений и автоматизированное тестирование на JS
Python
Веб-разработка, автоматическое тестирование и аналитика данных на Python
Java
Веб-разработка и автоматическое тестирование на Java
PHP
Веб-разработка и автоматическое тестирование на PHP
Ruby
Разработка сайтов и веб-приложений на Ruby on Rails
Go
Курсы по веб-разработке на языке Go
HTML
Современная верстка с помощью HTML и CSS
SQL
Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД
Git
Система управления версиями Git, регулярные выражения и основы командой строки
Похожие вопросы
26 октября 2021
26 октября 2021
26 октября 2021
26 октября 2021
- 8 800 100 22 47 бесплатно по РФ
- +7 495 085 28 38 бесплатно по Москве
Направления
- Курсы «Backend-разработка»
- Курсы «Frontend-разработка»
- Курсы «Создание сайтов»
- Курсы «Тестирование»
- Курсы «Аналитика данных»
- Интенсивные курсы
- Курсы DevOps
- Курсы «Веб-разработка»
- Курсы «Математика для программистов»
- Все курсы
О Хекслете
- О нас
- Карьера в Хекслете
- Хекслет Колледж
- Сведения об образовательной организации
- Лицензия № Л035-01216-73/00668844
ООО «Хекслет Рус» 432071, г. Ульяновск, пр-т Нариманова, дом 1Г, оф. 23 ОГРН 1217300010476
- Справка
- Вопросы и ответы
- Сообщество
- Дополнительно
- Условия использования
- Соглашение об обработке ПД
- Оферта
- Акции
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
________________________
pulya
19.03.17 20:47:40 MSK

SELECT * FROM mytable ORDER BY index DESC, id DESC LIMIT 1;
theNamelessOne ★★★★★
( 19.03.17 21:02:14 MSK )
Ответ на: комментарий от theNamelessOne 19.03.17 21:02:14 MSK
А Postgres это оптимизирует до O(n) или будет сортировать за O(n log n)?
anonymous
( 19.03.17 21:41:20 MSK )
Ответ на: комментарий от theNamelessOne 19.03.17 21:02:14 MSK
Спасибо!
А как сделать, чтобы указать по какому номеру в колонке index?
pulya
( 19.03.17 21:51:38 MSK ) автор топика
Ответ на: комментарий от anonymous 19.03.17 21:41:20 MSK

А Postgres это оптимизирует до O(n) или будет сортировать за O(n log n)?
Оптимизирует. А если индекс отстроить то будет O(1).