アプリ版:「スタンプのみでお礼する」機能のリリースについて

Top100で抽出したデータがありますが、
同じ値があると、データ数がぴったり100件ではなく、103件だったりします。
そこで削除クエリを使って余分なデータを削除したいです。

フィールド名:ID/分類/金額 とあり、
IDごと分類ごとに、金額を昇順でTop100を出しているので、
100件数以上の余分なデータを、降順に削除するにはどのようなクエリを作れば出来ますか?

どうかよろしくお願いいたします。

A 回答 (1件)

>IDごと分類ごとに、金額を昇順でTop100


もう一つ重複(同順位)を一意に分割する適当なフィールドが無いと
無理なのでは?

重複しているものの削除をAccessにお任せなら
レコードセットを回して出来るかも。

Sub n()
  Dim db As Database
  Dim rs As dao.Recordset
  Dim rsG As dao.Recordset
  Dim sSql As String
  
  Set db = CurrentDb
  Set rsG = db.OpenRecordset( _
        "select ID, 分類 from tableName group by ID,分類", _
        dbOpenSnapshot)
  
  Do Until rsG.EOF
    'Debug.Print rsG!ID, rsG!分類
    sSql = "select ID, 分類,金額 from tableName " _
      & " where ID=" & rsG!ID & " AND " _
      & "分類='" & rsG!分類 & "'" _
      & " order by ID,分類,金額 desc"
    Debug.Print sSql
    
    Set rs = db.OpenRecordset(sSql, dbOpenDynaset)
    rs.MoveFirst
    rs.Move 3 '100 だと検証しにくかったので3レコ
    
    Do Until rs.EOF
      'Debug.Print , , , rs!ID, rs!分類, rs!金額
      rs.Delete
      rs.MoveNext
    Loop
  
    rsG.MoveNext
  Loop
  
  rs.Close: Set rs = Nothing
  rsG.Close: Set rsG = Nothing
  db.Close: Set db = Nothing
End Sub

テーブルのバックアップを取ってからお試しを。
※投稿用にTabインデントを全角スペースにしています。

この回答への補足

自分の質問が適切でなかったようなので、一旦締めさせてもらいます。
説明が悪くて申し訳ありませんでした…

補足日時:2014/02/12 20:43
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
少しやりたかったこととは異なるようです。
ですが、重複データを削除するコード!便利そうなので、また別の機会にぜひ使わせていただきます。

お礼日時:2014/02/12 20:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!