我试图编写一个查询,只允许我抓住每个月的最新记录,然后总结它们。下面是我的表的一个例子。我想要做的是选择上个月。如果我能做到这一点,我可以弄清楚如何抓住2个月前,一年前,季度等等。
如果我们在十月,我想抓住并总结一下2014年9月24日8:57的记录
我也想要写一个单独的查询来做同样的事情,但对于八月来说。
我的目标是通过声明和设置变量来完成此操作。目前我在每个where子句中使用它。我只是想弄清楚我需要做的最大(日期)部分。
DECLARE @FirstDayofPrevMonth datetime
SET @FirstDayofPrevMonth = CONVERT(DATE, DATEADD(MONTH, -1, DATEADD(DAY, 1 - DAY(GETDATE()),
GETDATE())))
DECLARE @LastDayofPrevMonth datetime
SET @LastDayofPrevMonth = CONVERT(DATE, DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE()))
DECLARE @FirstDayofPrevMonthPrior datetime
SET @FirstDayofPrevMonthPrior = dateadd(MONTH, -2,@FirstDayofPrevMonth)
DECLARE @LastDayofPrevMonthPrior datetime
SET @LastDayofPrevMonthPrior = DATEADD(MONTH,-2,@LastDayofPrevMonth)
更新:以下是我用作最终解决方案的内容:
SELECT SUM(NumofAccounts) AS Total
FROM dbo.Summary
WHERE ImportDate = (select MAX(importdate) from AllAcctInfoSummary
where year(importdate) = year(@LastDayofPrevMonth)
and month(importdate) = month(@LastDayofPrevMonth))
group by ImportDate
答案 0 :(得分:2)
尝试:
select sum(some_column)
from my_table
where importdate =
(select max(importdate)
from my_table
where year(importdate) = 2014
and month(importdate) = 10)
group by importdate
您可以在设置所需的年份和月份后用变量替换2014和10。上面的查询逻辑上是你想要的,你可以修改你使用的变量。您还可以使用FirstDayofPrevMonth变量并在其上调用YEAR和MONTH以获取与您的表格进行比较的正确值。
答案 1 :(得分:2)
这将为您提供每月最重要日期的总和
select ImportDate, sum(NumOfAccounts)
from mytable t1
where not exists (
select 1
from mytable t2 where t2.ImportDate > t1.ImportDate
and month(t2.ImportDate) = month(t1.ImportDate)
and year(t2.ImportDate) = year(t1.ImportDate)
)
group by ImportDate
order by ImportDate
如果您只想上个月将以下内容添加到您的位置
and month(dateadd(month,-1,getdate())) = month(ImportDate)
and year(dateadd(month,-1,getdate())) = year(ImportDate)
使用分析函数的相同查询,应该更快一点
select ImportDate, sum(NumOfAccounts)
from (
select *,
rank() over (partition by month(ImportDate), year(ImportDate) order by ImportDate desc) rk
from mytable
) t1 where rk = 1
group by ImportDate
order by ImportDate