如何选择过去 13 个月的数据?

Posted

技术标签:

【中文标题】如何选择过去 13 个月的数据?【英文标题】:How can I select data from last 13 months? 【发布时间】:2021-03-05 11:01:56 【问题描述】:

我有两个结构完全相同的表

table 1 - Data_2020 --> This is an static table which has data from year 2020 and is not being updated anymore (archive table). It has around 4 million records
table 2 - Data_2021 --> This is my current table which is increasing everyday. It has currently 0.8 million records but it will increase till December.

现在我需要“合并”这两个表,并且每次运行以下查询时我只想要最近 13 个月的数据

Select * from Data_2020 
union all
select * from Data_2021

我必须每个月运行一次,并且只需要最近 13 个月的数据。如何应用过滤器?我在两个表中都有一个日期列“日期”。

【问题讨论】:

将不同年份的同一种数据保存在不同的表中可能不是最好的设计选择(对于像这样的查询)。你有没有考虑过类似select * from ( <current union query goes here> ) where date >= dateadd(month, -13, getdate()); 的东西? 为什么不同的表,都放在一张表里。 20年后你会有20张桌子?? 【参考方案1】:
declare @StartDate datetime,@CurrentDate datetime
set @CurrentDate = GETDATE();
set @StartDate = DATEADD(MONTH,-13,@CurrentDate)


SELECT *
FROM Data_2020
WHERE DateFieldName > @StartDate -- Or DateFieldName BETWEEN @StartDate AND @CurrentDate
UNION ALL
SELECT *
FROM Data_2021
WHERE DateFieldName > @StartDate -- Or DateFieldName BETWEEN @StartDate AND @CurrentDate

【讨论】:

【参考方案2】:

如果您想考虑表格中的日期列来获取当前最大日期,您可以使用此查询

DECLARE @CurrentMaxDate DATE
SET @CurrentMaxDate = (SELECT Top 1 [Date] FROM Data_2021 ORDER BY [Date] DESC)
;WITH TempCTE AS (
SELECT * FROM Data_2020 
UNION ALL
SELECT * FROM Data_2021
)
SELECT * FROM TempCTE
WHERE [Date] > DATEADD(Month,-13, @CurrentMaxDate)

【讨论】:

感谢该解决方案对我有用...早些时候,当我使用直接过滤器 [Date] > DATEADD(Month,-13, getdate()) thr 查询运行超过 15 分钟并且没有完成,但这在 40 秒内工作...... 对不起,我试过了,但我的声誉很低..

以上是关于如何选择过去 13 个月的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到滚动的 3 个月方差?

过去 13 个月的数据

如何在日期选择器中设置 3 个月的日期范围?

如果我在 vuetify 的日期选择器中单击下个月的图标,如何添加按钮单击以调用方法?

如何为过去 3 个月的每个日期运行查询

如何在SQL中获取当前日期最近六个月的前一个月数据