VBSでレコードの重複排除をしたいと思っていおります
現在、レコードとして
date3,user,u_id,action
2019/04/06 20:00,AAA,1,PPP
2019/04/06 20:00,AAA,1,GO
2019/04/06 20:00,AAA,1,ON
2019/04/06 20:30,BBB,2,GO
2019/04/06 18:30,CCC,3,GO
2019/04/06 18:30,CCC,3,ON
2019/04/09 19:25,AAA,1 ON
2019/04/09 21:10,BBB,2,OFF
2019/04/09 17:55,CCC,3,OFF
2019/04/09 17:55,CCC,3,OFF
を持っています(date_master.csv)
この情報で、日付・ユーザ(user)ごとに最上位のレコードのみを抽出したいのですが、
ADODBからdistinctを指定して実行した場合に狙った結果が出力できません
(date3とu_idで重複排除を行いたいことが最終目標です)
出したい結果(logout.csv)
2019/04/06,20:00:00,AAA,1,PPP
2019/04/06,20:30:00,BBB,2,GO
2019/04/06,18:30:00,CCC,3,GO
2019/04/09,19:25:00,AAA,1 ON
2019/04/09,21:10:00,BBB,2,OFF
2019/04/09,17:55:00,CCC,3,OFF
objADO.Execute
"SELECT distinct Format([date3],'yyyy/mm/dd') AS date11,Format(([date3]),'hh:nn:ss') AS date12, user ,u_id , action INTO logout.csv " & _
" FROM date_master.csv ;"
同一の「date」でかつ同一の「u_id」の場合、最上位のレコードのみを残す
(2つ目以降のレコードを重複削除する)
方法は、どのようにすればよいのでしょうか?
別方法で対応を行おうとしています
考え方としては、
「重複排除の結果は、user(u_id)が変わっているので、userが変更された直後のデータのみを輩出する」
です。
以下のような感じをイメージして作成してみます
Do Until cv.AtEndOfStream
a = Split(cv.ReadLine, ",")
c = c + 1
ReDim Preserve d(3, c)
For i = 0 to 3
d(i, c) = a(i)
Next
Loop
cv.Close
Set cv = Nothing
Set cv = so.OpenTextFile(p & "" & fa, 1)
t1 = cv.ReadLine
Set cr = so.OpenTextFile(p & "" & fc, 2, True)
cr.WriteLine
Do Until cv.AtEndOfStream
x = cv.ReadLine
a = Split(x, ",")
For i = 0 to c
If a(4) = d(1, i) Then
cr.WriteLine
Exit For
End If
Next
Loop
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/11 05:10
2019/04/11 05:12
2019/04/11 06:44
2019/04/11 10:31
2019/04/12 00:10