计算数据库中连续 2 年的成员 SQL Server Management Studio - 2008 R2
Count 2 consecutive years of Members in DB SQL Server Management Studio - 2008 R2
微软 SQL 服务器管理工作室 - 2008 R2
嗨,
我在此 table 中有一个名为 [VotingStatusHistory] 的 table 我有 5 列名为:
UID
MemberID
AffilliationDate
VotingStatus
Inserted
这个 table 有 [MemberID's] 并且持有会员加入的每一年的 [AffilliationDates]。
我想知道 [MemberID] 的 [AffilliationDate's] 连续 2 年 [VotingStatus] 为 1(以下示例为 2017 年、2018 年)
UID MemberID AffilliationDate VotingStatus Inserted
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,但到目前为止没有任何进展。
提前致谢...
首先,您应该知道 2008 r2 版本已于今年 7 月结束其扩展支持。这意味着它将不再接收来自 Microsoft 的更新(甚至不是安全更新!)。
这就是为什么您应该认真考虑升级到更高版本的 SQL Server 的原因之一。
另一个原因是从 2012 开始(即下一个版本),SQL 服务器支持 lag
和 lead
window 功能,这对像这样的查询。
说了这么多,假设您无法升级到受支持的版本,这里有一个查询应该可以让您使用 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
)
微软 SQL 服务器管理工作室 - 2008 R2
嗨,
我在此 table 中有一个名为 [VotingStatusHistory] 的 table 我有 5 列名为:
UID MemberID AffilliationDate VotingStatus Inserted
这个 table 有 [MemberID's] 并且持有会员加入的每一年的 [AffilliationDates]。
我想知道 [MemberID] 的 [AffilliationDate's] 连续 2 年 [VotingStatus] 为 1(以下示例为 2017 年、2018 年)
UID MemberID AffilliationDate VotingStatus Inserted 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,但到目前为止没有任何进展。 提前致谢...
首先,您应该知道 2008 r2 版本已于今年 7 月结束其扩展支持。这意味着它将不再接收来自 Microsoft 的更新(甚至不是安全更新!)。
这就是为什么您应该认真考虑升级到更高版本的 SQL Server 的原因之一。
另一个原因是从 2012 开始(即下一个版本),SQL 服务器支持 lag
和 lead
window 功能,这对像这样的查询。
说了这么多,假设您无法升级到受支持的版本,这里有一个查询应该可以让您使用 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
)