SQL Server: выборка данных за последний год динамически
Быстрый ответ
Для извлечения данных за последний год можно использовать функцию DATEADD
в сочетании с GETDATE()
:
SELECT * FROM ваша_таблица
WHERE ваша_дата >= DATEADD(year, -1, GETDATE());
Такой запрос исключает записи, даты которых старше одного года от текущей даты.
Учёт разницы часовых поясов и форматирования дат
Если важны разница часовых поясов и специфический формат дат, рекомендую использовать такой подход:
SELECT *
FROM ваша_таблица
WHERE ваша_дата >= CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, ваша_дата), DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AND ваша_дата < CONVERT(datetime, GETDATE());
Функция SWITCHOFFSET
позволяет корректно сравнивать данные с учётом временных зон.
Динамические и универсальные запросы
Для формирования динамических запросов, учтенных на различные временные промежутки, возможно использовать такую конструкцию:
SELECT *
FROM ваша_таблица
WHERE ваша_дата >= CAST(DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) AS DATE) – 365;
Этот подход поможет получить данные за предыдущий год, начиная с первого дня того года.
Визуализация процесса
Попробуйте представить эту задачу как обрезку дерева, которое оставляет свежие ветки, а именно данные за последний год:
🌳 Вся историческая информация:
| 🍁 2019 | 🍂 2020 | 🍃 2021 | 🌿 2022 | 🌱 2023 |
Инструмент обрезки — SQL (условие WHERE):
| 🪓 WHERE DateColumn >= DATEADD(YEAR, -1, GETDATE()) |
🌴 Актуальные данные:
| 🌿 2022 | 🌱 2023 |
Запросы помогают обновлять данные, как обрезка деревьев способствует их здоровому развитию.
Нахождение баланса: Производительность и Читабельность
При составлении SQL запроса важно находить баланс между его производительностью и удобством чтения:
-- Только самые актуальные данные переживут этот отбор! 🏆🪓
SELECT *
FROM ваша_таблица WITH (INDEX(IX_ваша_дата)) -- Использование индекса призвано ускорить запрос! 🚀
WHERE ваша_дата >= DATEADD(year, -1, CAST(GETDATE() AS date));
Нужно обратить внимание на индексацию колонки с датой, чтобы обеспечить лучшую производительность. Комментарии помогут избежать путаницы.
Разбор фильтров по дате
Важно отличать данные за "прошедшие 365 дней" и за "последний календарный год":
-- Вот данные за последний календарный год!
SELECT *
FROM ваша_таблица
WHERE YEAR(ваша_дата) = YEAR(DATEADD(year, -1, GETDATE()));
Такой запрос позволяет получить данные именно за предыдущий календарный год, что актуально для годовой отчётности.
Полезные материалы
- Функция DATEADD в SQL Server | Microsoft Learn — руководство по работе с датами.
- Условие WHERE в SQL — незаменимый инструмент для фильтрации данных.
- Функция GETDATE в SQL Server | Microsoft Learn — время играет большую роль в процессе разработки.
- Проектирование несгруппированных индексов в SQL Server — повышаем производительность запросов при помощи индексации.
- Дата и время в SQL Server (Transact-SQL) | Microsoft Learn — знакомьтесь с типами данных и функциями даты и времени.