我有两个表存储类似的数据但不同的时间段:
MainTable:包含当前年份的记录。
ArchiveTable:包含前几年的记录。
两个表都有一个名为 DateColumn(类型为 DATETIME)的列。我需要编写一个 T‑SQL 查询(或一组查询),该查询基于两个输入参数 @StartDate 和 @EndDate 执行如下操作:
仅限当前年份:如果两个日期均在当前年份内,则仅从 MainTable 中获取数据。
仅限前几年:如果两个日期都在当前年份之前,则仅从 ArchiveTable 中获取数据。
混合范围:如果日期范围跨越前几年和当前年份,则从两个表中获取数据。
例如,如果当前年份是 2025 年:
@StartDate = '2025-03-01' 和 @EndDate = '2025-03-31' 应该仅返回来自 MainTable 的行。
@StartDate = '2024-11-01' 和 @EndDate = '2024-12-31' 应该仅返回来自 ArchiveTable 的行。
@StartDate = '2024-12-15' 和 @EndDate = '2025-01-15' 应该返回两个表的行(在边界处分割)。
我曾考虑过使用 IF...ELSE 逻辑来决定查询哪个表,但我正在寻找有关实现此操作的最佳或最优雅方法的建议(也许在单个查询中,使用 UNION ALL 或动态 SQL)。
实现此逻辑的最佳实践或替代方法是什么? 可以通过单个查询或其他可能简化维护的技术来实现吗?