获取年份和月份字段的最近一年的记录
Get most recent year of records on year and month field
我有一个 table 这样的:
Id | Year | Month
1 | 2018 | 1
2 | 2018 | 2
3 | 2018 | 3
我需要 select 最近 12 个月的 ID,这是我想出的:
SELECT TOP 12 [Id],
YEAR([DateReported]) AS [Year], MONTH([DateReported]) AS [Month]
FROM (
SELECT [Id], CAST(CAST([Year] AS VARCHAR(10)) + '/' + CAST([Month] AS VARCHAR(10)) + '/1' AS DATETIME) AS DateReported
FROM [MyTable]
) T
ORDER BY T.[DateReported] DESC
但是,我做的太多了,有没有更有效的方法?
这个怎么样:
select t.*
from t
where year * 12 + month >= year(getdate()) * 12 + month(getdate()) * 12 - 12;
我会按月排序(降序),然后我会得到前 12 行,如:
select top 12 id
from my_table
order by year * 12 + month desc
看来您不想要最近的 12 个,您想要最近 12 个月(也就是一年)的那些。您根本不需要进行任何转换....
declare @t table(id int identity(1,1), year int, month int);
insert into @t(year, month)
values (2017,11)
,(2017,11)
,(2017,12)
,(2017,12)
,(2018,1)
,(2018,2)
,(2018,1)
select *
from @t t
where format(t.year , '0000')+'-' +format(t.month, '00') >= format(dateadd(year, -1, getdate()), 'yyyy-MM')
假设您的 Select returns 结果正确,则无需任何计算,只需使用以下命令即可:
select top 12 Id, [year], [month]
from MyTable
order by [year] desc, [month] desc
我有一个 table 这样的:
Id | Year | Month
1 | 2018 | 1
2 | 2018 | 2
3 | 2018 | 3
我需要 select 最近 12 个月的 ID,这是我想出的:
SELECT TOP 12 [Id],
YEAR([DateReported]) AS [Year], MONTH([DateReported]) AS [Month]
FROM (
SELECT [Id], CAST(CAST([Year] AS VARCHAR(10)) + '/' + CAST([Month] AS VARCHAR(10)) + '/1' AS DATETIME) AS DateReported
FROM [MyTable]
) T
ORDER BY T.[DateReported] DESC
但是,我做的太多了,有没有更有效的方法?
这个怎么样:
select t.*
from t
where year * 12 + month >= year(getdate()) * 12 + month(getdate()) * 12 - 12;
我会按月排序(降序),然后我会得到前 12 行,如:
select top 12 id
from my_table
order by year * 12 + month desc
看来您不想要最近的 12 个,您想要最近 12 个月(也就是一年)的那些。您根本不需要进行任何转换....
declare @t table(id int identity(1,1), year int, month int);
insert into @t(year, month)
values (2017,11)
,(2017,11)
,(2017,12)
,(2017,12)
,(2018,1)
,(2018,2)
,(2018,1)
select *
from @t t
where format(t.year , '0000')+'-' +format(t.month, '00') >= format(dateadd(year, -1, getdate()), 'yyyy-MM')
假设您的 Select returns 结果正确,则无需任何计算,只需使用以下命令即可:
select top 12 Id, [year], [month]
from MyTable
order by [year] desc, [month] desc