EOMONTH (Transact-SQL)
Эта функция возвращает последний день месяца, содержащего указанную дату, с необязательным смещением.
Синтаксис
EOMONTH ( start_date [, month_to_add ] )
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
start_date
Выражение даты, задающее дату, для которой необходимо возвратить последний день месяца.
month_to_add
Необязательное целочисленное выражение, задающее количество месяцев, добавляемых к параметру start_date.
Если аргумент month_to_add имеет значение, то EOMONTH добавляет указанное число месяцев к значению start_date и возвращает последний день месяца, соответствующего полученной дате. Если при таком сложении происходит выход за пределы допустимого диапазона дат, функция EOMONTH вызывает ошибку.
Тип возвращаемых данных
date
Remarks
Функция EOMONTH поддерживает удаленное взаимодействие с серверами SQL Server 2012 (11.x) и более поздних версий. Она не может быть удаленной для серверов с версией ниже SQL Server 2012 (11.x).
Примеры
A. EOMONTH с явным типом datetime
DECLARE @date DATETIME = '12/1/2011'; SELECT EOMONTH ( @date ) AS Result; GO
Result ------------ 2011-12-31 (1 row(s) affected)
Б. EOMONTH со строковым параметром и неявным преобразованием
DECLARE @date VARCHAR(255) = '12/1/2011'; SELECT EOMONTH ( @date ) AS Result; GO
Result ------------ 2011-12-31 (1 row(s) affected)
В. Функция EOMONTH с параметром month_to_add и без него
Значения в этих результирующих наборах отражают дату выполнения между 12/01/2011 и 12/31/2011 (включительно).
DECLARE @date DATETIME = GETDATE(); SELECT EOMONTH ( @date ) AS 'This Month'; SELECT EOMONTH ( @date, 1 ) AS 'Next Month'; SELECT EOMONTH ( @date, -1 ) AS 'Last Month'; GO
This Month ----------------------- 2011-12-31 (1 row(s) affected) Next Month ----------------------- 2012-01-31 (1 row(s) affected) Last Month ----------------------- 2011-11-30 (1 row(s) affected)
Обратная связь
Были ли сведения на этой странице полезными?
Как получить последнюю по дате запись (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
Получить самую последнюю запись (по дате)
Здравствуйте. Подскажите, как получить из таблицы SomeSnapshot записи, которые были добавлены в таблицу за самую последнюю дату?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
DECLARE @SnapshotDate DATETIME = '2017-02-04 12:00:00'; INSERT INTO SomeSnapshot (PersonID, SnapshotDate, ChildID) VALUES (1, @SnapshotDate, 0), (1, @SnapshotDate, 2), (1, @SnapshotDate, 3), (1, @SnapshotDate, 5), (1, @SnapshotDate, 7), (1, @SnapshotDate, 9); SET @SnapshotDate = '2017-03-04 12:00:00'; INSERT INTO SomeSnapshot (PersonID, SnapshotDate, ChildID) VALUES (1, @SnapshotDate, 0), (1, @SnapshotDate, 3), (1, @SnapshotDate, 5), (1, @SnapshotDate, 7), (1, @SnapshotDate, 9), (1, @SnapshotDate, 10);
Добавлено через 48 секунд
Мне вообще это нужно для того, чтобы из таблицы получить все записи за самую последнюю дату.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CREATE TABLE dbo.SomeSnapshot ( PersonID BIGINT NOT NULL ,SnapshotDate DATETIME NOT NULL ,ChildID BIGINT NOT NULL ,CONSTRAINT PK_SomeSnapshot PRIMARY KEY CLUSTERED (PersonID, SnapshotDate, ChildID) ) ON [PRIMARY] GO ALTER TABLE dbo.SomeSnapshot ADD CONSTRAINT FK_ChildID_PersonID FOREIGN KEY (ChildID) REFERENCES dbo.Person (PersonID) GO ALTER TABLE dbo.SomeSnapshot ADD CONSTRAINT FK_PersonID_PersonID FOREIGN KEY (PersonID) REFERENCES dbo.Person (PersonID) GO
Как получить последнюю строку 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
- Справка
- Вопросы и ответы
- Сообщество
- Дополнительно
- Условия использования
- Соглашение об обработке ПД
- Оферта
- Акции
