2017-06-13 22 views
0

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

謝謝!

+1

編輯你的問題,並顯示數據。 –

+0

是你期望的結果 – 2017-06-13 14:06:24

回答

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()函數(沒有數據庫,據我所知)。

+0

是的,我的意思是我使用row_number()。更改爲count(*)給了我與row_number()相同的結果:1,2,3而不是3,3,3.我正在更新問題以更具體。 – jackstraw22

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 
+0

是的,我認爲這工作!謝謝。 – jackstraw22