SQL Server: выборка данных за последний год динамически

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для извлечения данных за последний год можно использовать функцию DATEADD в сочетании с GETDATE():

SQL
Скопировать код
SELECT * FROM ваша_таблица
WHERE ваша_дата >= DATEADD(year, -1, GETDATE());

Такой запрос исключает записи, даты которых старше одного года от текущей даты.

Кинга Идем в IT: пошаговый план для смены профессии

Учёт разницы часовых поясов и форматирования дат

Если важны разница часовых поясов и специфический формат дат, рекомендую использовать такой подход:

SQL
Скопировать код
SELECT *
FROM ваша_таблица
WHERE ваша_дата >= CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, ваша_дата), DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AND ваша_дата < CONVERT(datetime, GETDATE());

Функция SWITCHOFFSET позволяет корректно сравнивать данные с учётом временных зон.

Динамические и универсальные запросы

Для формирования динамических запросов, учтенных на различные временные промежутки, возможно использовать такую конструкцию:

SQL
Скопировать код
SELECT *
FROM ваша_таблица
WHERE ваша_дата >= CAST(DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) AS DATE) – 365;

Этот подход поможет получить данные за предыдущий год, начиная с первого дня того года.

Визуализация процесса

Попробуйте представить эту задачу как обрезку дерева, которое оставляет свежие ветки, а именно данные за последний год:

Markdown
Скопировать код
🌳 Вся историческая информация:
| 🍁 2019 | 🍂 2020 | 🍃 2021 | 🌿 2022 | 🌱 2023 |

Инструмент обрезки — SQL (условие WHERE):
| 🪓 WHERE DateColumn >= DATEADD(YEAR, -1, GETDATE()) |

🌴 Актуальные данные:
| 🌿 2022 | 🌱 2023 |

Запросы помогают обновлять данные, как обрезка деревьев способствует их здоровому развитию.

Нахождение баланса: Производительность и Читабельность

При составлении SQL запроса важно находить баланс между его производительностью и удобством чтения:

SQL
Скопировать код
-- Только самые актуальные данные переживут этот отбор! 🏆🪓
SELECT *
FROM ваша_таблица WITH (INDEX(IX_ваша_дата)) -- Использование индекса призвано ускорить запрос! 🚀
WHERE ваша_дата >= DATEADD(year, -1, CAST(GETDATE() AS date));

Нужно обратить внимание на индексацию колонки с датой, чтобы обеспечить лучшую производительность. Комментарии помогут избежать путаницы.

Разбор фильтров по дате

Важно отличать данные за "прошедшие 365 дней" и за "последний календарный год":

SQL
Скопировать код
-- Вот данные за последний календарный год!
SELECT *
FROM ваша_таблица
WHERE YEAR(ваша_дата) = YEAR(DATEADD(year, -1, GETDATE()));

Такой запрос позволяет получить данные именно за предыдущий календарный год, что актуально для годовой отчётности.

Полезные материалы

  1. Функция DATEADD в SQL Server | Microsoft Learn — руководство по работе с датами.
  2. Условие WHERE в SQL — незаменимый инструмент для фильтрации данных.
  3. Функция GETDATE в SQL Server | Microsoft Learn — время играет большую роль в процессе разработки.
  4. Проектирование несгруппированных индексов в SQL Server — повышаем производительность запросов при помощи индексации.
  5. Дата и время в SQL Server (Transact-SQL) | Microsoft Learn — знакомьтесь с типами данных и функциями даты и времени.