计算每个成员更改日期的次数

时间:2017-06-13 13:55:00

标签: sql sql-server

我有一个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

谢谢!

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