获取给定日期的状态的SQL查询
我相信这个问题以前已经得到了回答,但是找不到 我有一个每几周改变状态的项目表。我想看看任意的一天,找出每个状态下有多少个项目 例如: tbl_项目历史记录获取给定日期的状态的SQL查询,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我相信这个问题以前已经得到了回答,但是找不到 我有一个每几周改变状态的项目表。我想看看任意的一天,找出每个状态下有多少个项目 例如: tbl_项目历史记录 ItemID StatusChangeDate StatusID 样本数据: 1001, 1/1/2010, 1 1001, 4/5/2010, 2 1001, 6/15/2010, 4 1002, 4/1/2010, 1 1002, 6/1/2010, 3 ... 因此,我需要计算出在给定的一天中每个状态下有多少项。因此,在2010年5
ItemID
StatusChangeDate
StatusID
样本数据:
1001, 1/1/2010, 1
1001, 4/5/2010, 2
1001, 6/15/2010, 4
1002, 4/1/2010, 1
1002, 6/1/2010, 3
...
因此,我需要计算出在给定的一天中每个状态下有多少项。因此,在2010年5月1日,有一个项目(1001)处于状态2,一个项目处于状态1(1002)
由于这些项目的状态不会经常改变,也许我可以每天晚上创建一个缓存表,为一年中的每一个项目和每一天创建一行?我不知道这是不是最好的,也不知道怎么做
我将SQL Server 2008R2用于任意一天,您可以执行以下操作:
select ih.*
from (select ih.*,
row_number() over (partition by itemId order by StatusChangeDate desc) as seqnum
from tbl_ItemHistory ih
where StatusChangeDate <= @YOURDATEGOESHERE
) ih
where seqnum = 1
? 您尝试了哪些不起作用的查询?我的第一个问题是方法:我是否需要将结果缓存到另一个表中?如果是,我该怎么做?我是SQLYou's right的新手Gordon,我错过了问题的那一部分。我会撤回我的答案以避免混淆…太好了。我得去研究配分函数。假设我确实想创建一个表,该表中的每一项和每一天都有一行。这将使我做一些报告更容易。我该怎么做?@user46372。你有机会问另一个问题。听起来不错。我把它放在这里:
select statusId, count(*)
from (select ih.*,
row_number() over (partition by itemId order by StatusChangeDate desc) as seqnum
from tbl_ItemHistory ih
where StatusChangeDate <= @YOURDATEGOESHERE
) ih
where seqnum = 1
group by StatusId