我有一个SQL数据集,其中成员记录可能在一天内多次更新。 date_changed字段将反映每个更新。我需要找一天记录改变的次数。我正在使用row_num()函数,但我似乎无法获得最大更改次数。 Times Changed字段显示了我需要的内容,Ti显示了我能用row_num()获得的内容:
MemberId Date_Changed Times Changed Ti
1 2015-06-22 12:58:17 3 1
1 2015-06-22 12:59:01 3 2
1 2015-06-22 11:00:03 3 3
6 2015-05-24 10:00:00 2 1
6 2015-05-24 11:00:000 2 2
谢谢!
答案 0 :(得分:1)
根据您的示例数据,您似乎希望每个日期的每个成员ID的行数。所以,我认为这就是你想要的:
select t.*,
count(*) over (partition by memberid, cast(date_changed as date)) as TimesChanged
from t;
我推测您使用的是row_number()
而不是count(*)
。 SQL Server没有row_num()
函数(据我所知,没有数据库)。
答案 1 :(得分:1)
我认为你需要代码来获得预期的结果
IF OBJECT_ID('Tempdb..#Temp') IS NOT NULL
DROP TABLE #Temp
;With cte( MemberId,Date_Changed)
AS
(
SELECT 1,'2015-06-22 12:58:17' Union all
SELECT 1,'2015-06-22 12:59:01' Union all
SELECT 1,'2015-06-22 11:00:03' Union all
SELECT 6,'2015-05-24 10:00:00' Union all
SELECT 6,'2015-05-24 11:00:000'
)
SELECT * INTO #Temp FROm cte
SELECT MemberId,
Date_Changed,
Max(Date_ChangedCnt)Over(Partition by MemberId Order by MemberId) AS 'Times Changed',
Date_ChangedCnt AS Ti From
(
SELECT *,ROW_NUMBER()Over(Partition By MemberId Order by Date_Changed) AS Date_ChangedCnt FROM #Temp
)Dt
结果
MemberId Date_Changed Times Changed Ti
1 2015-06-22 12:58:17 3 1
1 2015-06-22 12:59:01 3 2
1 2015-06-22 11:00:03 3 3
6 2015-05-24 10:00:00 2 1
6 2015-05-24 11:00:000 2 2