2017-06-13 24 views
0

メンバーレコードが1日に複数回更新されたSQLデータセットがあります。 date_changedフィールドには各更新が反映されます。私は1日にレコードが何回変更されたのかを知る必要があります。私はrow_num()関数で遊んでいたが、私は最大時間が変更されたようには見えない。タイムズ変更されたフィールドは、私が必要なものを示しており、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

これはあなたの期待している結果です –

答えて

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()と同じ結果が得られます。3,3,3の代わりに1、2、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

関連する問題