Sql server 2008 r2 统计连续两年在DB SQL Server Management Studio中的成员数-2008 R2
Microsoft SQL Server Management Studio-2008 R2 嗨 我有一个名为[VotingStatusHistory]的表,在该表中,我有5列,分别命名为: UID MemberID AffilliationDate VotingStatus Inserted 液体 MemberID 宣誓日期 投票状态 插入 此表包含[MemberID],并保存会员每年的[AffilliationDates] 我想知道什么样的[MemberID]连续两年拥有[AffilliationDate],且[VotingStatus]为1(以下为2017年、2018年的示例) UID MemberID AffilliationDate VotingStatus已插入 535436 153393 2017-04-24 09:46:13.000 1 2018-03-14 00:00:00.000 582084 153393 2018-04-30 09:46:13.000 1 2019-01-29 00:00:00.000 请帮助我如何处理这个问题,我已经尝试过使用SUM和CASE,但到目前为止还没有结果。Sql server 2008 r2 统计连续两年在DB SQL Server Management Studio中的成员数-2008 R2,sql-server-2008-r2,Sql Server 2008 R2,Microsoft SQL Server Management Studio-2008 R2 嗨 我有一个名为[VotingStatusHistory]的表,在该表中,我有5列,分别命名为: UID MemberID AffilliationDate VotingStatus Inserted 液体 MemberID 宣誓日期 投票状态 插入 此表包含[MemberID],并保存会员每年的[AffilliationDates] 我想知道什么样的[MemberID]连续两年拥有[Affilliat
提前感谢…首先,您应该知道2008 r2版本已于今年7月结束其扩展支持。这意味着它将不再接收来自Microsoft的更新(甚至安全更新!)。
这就是为什么您应该认真考虑升级到SQLServer的后期版本的原因。 另一个原因是,从2012年开始(这是下一个版本),SQL Server支持
lag
和lead
窗口函数,这对这样的查询非常有用
说到这里,假设您无法升级到受支持的版本,下面是一个查询,它将为您提供2008 r2版本所需的结果:
SELECT vsh.UID, vsh.MemberID, vsh.AffilliationDate, vsh.VotingStatus, vsh.Inserted
FROM [dbo].[VotingStatusHistory] As vsh
WHERE vsh.VotingStatus = 1
AND EXISTS
(
SELECT 1
FROM [dbo].[VotingStatusHistory] As i
WHERE vsh.MemberID = i.MemberID
AND i.VotingStatus = 1
AND YEAR(i.AffilliationDate) = YEAR(vsh.AffilliationDate) + 1
)
SELECT vsh.UID, vsh.MemberID, vsh.AffilliationDate, vsh.VotingStatus, vsh.Inserted
FROM [dbo].[VotingStatusHistory] As vsh
WHERE vsh.VotingStatus = 1
AND EXISTS
(
SELECT 1
FROM [dbo].[VotingStatusHistory] As i
WHERE vsh.MemberID = i.MemberID
AND i.VotingStatus = 1
AND YEAR(i.AffilliationDate) = YEAR(vsh.AffilliationDate) + 1
)