如何使用SELECT语句列出从当前月份开始的最近10年的月份?

我可以列出过go 10年以来当前的所有月份,但不能列出这几年中所有随后的12个月

select top 10 dateadd(year, -1*row_number() over (order by name)+1, convert (varchar, getdate(),112)) as y
from sys.objects

会给我从本月开始的最后10年

202403...201503

select top 12 dateadd(MM, -1*row_number() over (order by name)+1, convert (varchar, getdate(),112)) as m
from sys.objects

会给我从今天开始的最后12个月

但我如何合并上面的两个语句,以获得过go 10年中当前月份的所有月份呢?

请指点一下.

推荐答案

只有一个选项使用一个特殊的计数/数字表

Select N
      ,YrMth = format(dateadd(month,-N,getdate()),'yyyyMM')
 From  (
        Select Top (121) N=-1+Row_Number() Over (Order By (Select NULL)) 
         From  sys.objects
      ) B

Results

N   YrMth
0   202403
1   202402
2   202401
3   202312
4   202311
5   202310
6   202309
...
118 201405
119 201404
120 201403

Sql相关问答推荐

在数据分区内执行确定

如何退回当年的所有参赛作品?""

数据库索引:如何使用名称和类别对项目进行最佳索引?

如何嵌套两条SQL语句

OVER子句WITH PARTITION BY和ORDER BY忽略主查询的WHERE子句

在SQL中返回缺省值,即使查询不返回任何结果

对多个条件的SQL进行排名

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

数据库SQL-CTE命名空间(错误?)使用临时视图

用VB.NET在Dapper中实现MS Access数据库顺序透视

每个学校 Select N个最新的行,但跳过同一学生的重复行

通过UPDATE SELECT更新表时出现问题

Select 组中的第一行,但在并发环境中

在presto sql中解析带有区域的时间格式

Postgres存在限制问题「小值」

获取记录的上一个值,并将其与当前值一起显示

正则表达式忽略特定数据部分的分隔符

T-SQL 查询计算日期在其他列中定义的日期之间绑定的行数

为什么 Oracle 在一个查询中对同一张表同时执行 TABLE SCAN 和 INDEX UNIQUE SCAN?

在 sql 中合并系列以删除重复项