根据列中显示的最近日期从 table 中获取过去 6 个月的数据
Get past 6 months data from a table based on the recent date present in the column
我有一个名为 table
的数据库 table,table
中有一列 Col
,数据类型为 varchar
。列 Col
包含格式为 MMM-YY
的日期。
例如 Col
的值为:
Col
DEC-21
NOV-21
SEP-20
OCT-19
DEC-21
因为,我们可以看到数据可以像 DEC-21 一样复制。我想根据 Col
中存在的最近一个月提取过去 6 个月的数据。例如,如果 DEC-21 是最近的日期(考虑,日期不存在)等,我想要从 DEC-21 到 JUN-21 的数据,即如果我们将 DEC 映射到 12 和 12-21 到 06-21 JUN 到 06。这个 Table
有很多列,其中一列是我上面提到的 Col
,我必须使用 SQL 基于列 Col
提取数据查询。
我写了一个查询:
SELECT *
FROM table
WHERE CAST(RIGHT(Col,4) AS INT) Between 2020 and 2021
但是我得到的是 2020 年到 2021 年之间的数据。因此,通过对上述查询进行一些修改,或者是否有任何其他方法可以从 MMM-YYYY
中的最近日期获取过去 6 个月的数据来自 Col
列的格式。
我在 R 中编写代码,我在使用 dbGetQuery()
时必须传递 SQL 查询。我已经在将它存储在数据框中后完成了这件事,但是有什么方法可以通过 sql 查询直接完成吗?
任何帮助将不胜感激。
像这样的东西应该有用。
SELECT * FROM table 其中 CONVERT(DATE,'01-'+Col) BETWEEN '01-Jun-2021' 和 '31-Dec-2021'
with data as (
select *,
convert(date, '01-' + dt, 105) as converted_dt,
max(convert(date, '01-' + dt, 105)) over () as last_converted_dt
from T
)
select * from data
where converted_dt >= dateadd(month, -6, last_converted_dt);
105 来自日期格式列表,可以在 cast/convert
的文档中找到。 SQL 服务器可以转换像 Apr 2021
这样的字符串,所以像下面这样的转换也可能有效(如果你真的有四位数的年份)但最好像我上面那样明确格式。
cast(replace(dt, '-', ' ' as date)
我有一个名为 table
的数据库 table,table
中有一列 Col
,数据类型为 varchar
。列 Col
包含格式为 MMM-YY
的日期。
例如 Col
的值为:
Col |
---|
DEC-21 |
NOV-21 |
SEP-20 |
OCT-19 |
DEC-21 |
因为,我们可以看到数据可以像 DEC-21 一样复制。我想根据 Col
中存在的最近一个月提取过去 6 个月的数据。例如,如果 DEC-21 是最近的日期(考虑,日期不存在)等,我想要从 DEC-21 到 JUN-21 的数据,即如果我们将 DEC 映射到 12 和 12-21 到 06-21 JUN 到 06。这个 Table
有很多列,其中一列是我上面提到的 Col
,我必须使用 SQL 基于列 Col
提取数据查询。
我写了一个查询:
SELECT *
FROM table
WHERE CAST(RIGHT(Col,4) AS INT) Between 2020 and 2021
但是我得到的是 2020 年到 2021 年之间的数据。因此,通过对上述查询进行一些修改,或者是否有任何其他方法可以从 MMM-YYYY
中的最近日期获取过去 6 个月的数据来自 Col
列的格式。
我在 R 中编写代码,我在使用 dbGetQuery()
时必须传递 SQL 查询。我已经在将它存储在数据框中后完成了这件事,但是有什么方法可以通过 sql 查询直接完成吗?
任何帮助将不胜感激。
像这样的东西应该有用。
SELECT * FROM table 其中 CONVERT(DATE,'01-'+Col) BETWEEN '01-Jun-2021' 和 '31-Dec-2021'
with data as (
select *,
convert(date, '01-' + dt, 105) as converted_dt,
max(convert(date, '01-' + dt, 105)) over () as last_converted_dt
from T
)
select * from data
where converted_dt >= dateadd(month, -6, last_converted_dt);
105 来自日期格式列表,可以在 cast/convert
的文档中找到。 SQL 服务器可以转换像 Apr 2021
这样的字符串,所以像下面这样的转换也可能有效(如果你真的有四位数的年份)但最好像我上面那样明确格式。
cast(replace(dt, '-', ' ' as date)