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

OSはWin98SE
Access2000です。
多分簡単なことなのかもしれないのですが、追加クエリの抽出条件を使って、
その列(更新回数)でいちばん大きな数字のみ別テーブルに抽出(追加)させたいのですがその式がわからず悩んでいます。

例(主キーなし)
店番号|商品番号|更新回数|金額|・・・
001 |A021  |  2 |300 |・・・
002 |A034  |  1 |200 |・・・
001 |A122  |  1 |150 |・・・
001 |A043  |  3 |500 |・・・

上記で店番号001が3データ入っている中の更新回数が3のデータのみ別のテーブルに追加したいのですが、最大を求めるのでMaxやDMaxを使用したらよいのかな?などと思ったのですが、その先の式の書き方がわからないのでどなたか教えていただけませんか。
どうぞよろしくお願いします。

A 回答 (3件)

三度storkです。



蛇足ですが、先ほどの回答は、SQLを直書きするものだったんで、練習用にGUIでの操作で最新データの取り出し方を補足しておきます。

from句に入っているSQLをクエリとして保存してください。
クエリ名は、[最新データ]
-------------------------------------------
select 店番号,max(更新回数) as max更新回数
from [PC売上_T] group by 店番号
-------------------------------------------
どんなクエリになっているかは、デザインビューとデータシートビューで確認してください。

もうひとつクエリを作ります。
デザインビューで[PC売上_T]とさっき作った[最新データ]を追加して、店番号で結合し、さらに更新回数で結合します。結合線がふたつ出来ます。

これで最新のデータのみを抽出するクエリの出来上がりです。

この二つのクエリを一回で済ませると、#1のSQLになります。クエリを二つに分けていると誤ってクエリ[最新データ]を削除すると動作しなくなるので、出来るだけひとつにしましょう。
    • good
    • 0
この回答へのお礼

storkさん回答ありがとうございます。
また、質問しておきながらお返事が遅くなりまして申し訳ありません。
直書きのSQLは、まだみて理解できるところまで行っていないので
勉強して行きたいと思っています。
補足でいただいたGUIでの操作ありがとうございます。
これなら私にもわかりそうです早速試してみます。
昨日に続き今日も外出になりそうですのでこの質問は一度閉じさせていただきます。
もし、実行してみてわからないときは、また質問させてください。
そのときはどうぞよろしくお願いいたします。
本当に勉強になりますありがとうございました。

お礼日時:2001/10/31 11:41

似たような質問だと思ったら同じ方でしたか、失礼しました。



>SQL中のtable1やtable2は指定するテーブル名を指定し
>たら良かったでしょうか。
回答#1のSQLはひとつのテーブルを切り口を変えて自己結合しています。
table1はテーブル名で、table2はtable1を元にしたクエリに別名(仮の名前)をつけているだけなんで、何でもいいです。

補足の内容からいくとtable1は[PC売上_T]ですかね。

>教えていただいたSQLはどこの部分に追加したらよいので>しょうか。
[PC売上_T]が履歴形式のトランザクションで、[PC売上_M]が最新情報のマスタですね。

from句以下を
-----------------------------------------------
from [PC売上_T]
   inner join
   (select 店番号,max(更新回数) as max更新回数
    from [PC売上_T] group by 店番号 ) as 最新データ
   on ([PC売上_T].店番号 = 最新データ.店番号)
   and ([PC売上_T].更新回数 = 最新データ.max更新回数)
------------------------------------------------
※別名が[table2]だと分かりにくいので[最新データ]としました。

ただ追加するだけだと、前の質問(http://www.okweb.ne.jp/kotaeru.php3?q=155505)と同じ問題が発生すると思われますので、何らかの方法で回避してください。(分からなければ補足してください。)
    • good
    • 0

過去ログに同じ問題があるのでそれの応用だと思います。



店番号+更新回数でユニークになりますね。

select *
from table1 inner join (select 店番号,max(更新回数) as max更新回数 from table1 group by 店番号)as table2) on (table1.店番号=table2.店番号) and (table1.更新回数=table2.max更新回数)

この回答への補足

storkさんたびたびありがとうございます。
また、返事が遅くなりすみません。
昨日回答いただいてから色々とやってみたのですが、私のSQL知識不足でうまくいきませんでした。
すみませんが少し質問させてください。
SQL中のtable1やtable2は指定するテーブル名を指定したら良かったでしょうか。

それと追加クエリで現在
INSERT INTO PC売上_M(店番号,商品番号,更新回数,金額・・・)
SELECT [PC売上_T].[店番号],[PC売上_T].[商品番号],[PC売上_T].[更新回数],[PC売上_T].[金額]・・・
FROM PC売上_T;
のような感じであるのですが、教えていただいたSQLはどこの部分に追加したらよいのでしょうか。
お手数ですがどうぞよろしくお願いします。

補足日時:2001/10/30 09:50
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A