発注テーブル
フィールド
「no」・・・自動連番
「店舗cd」・・・店舗のコード
「発注日」・・・「yyyymmdd」形式の日付
「発注金額」・・・金額
「no」が主キーです。
サンプルテーブル
----------------------------------------
連番---- 店舗---- 発注日---- 金額
1--- 692--- 20070401--- 5250円
2--- 692--- 20070403--- 10500円
3--- 510--- 20070406--- 7750円
4--- 510--- 20070401--- 1050円
5--- 692--- 20070404--- 2100円
----------------------------------------
このようなテーブルから
3--- 510--- 20070406--- 7750円
5--- 692--- 20070404--- 2100円
のように「店舗毎で最新の一件のリスト」を抽出するにはどのようなSQL文書けばよろしいでしょうか?
または、ACCESSのデザインヴューでもOKです。
ご指導よろしくおねがいいたします。
クエリで、店舗ごとの最大発注日(Max関数)
(デザインヴューでいうと、
店舗:集計 グループ化
発注日:集計 最大
)
のクエリを作成して
もとのテーブルと
店舗、発注日で結合するのが簡単だと思います
select ta2.* from (select 店舗cd , max (発注日) as ht from 発注テーブル group by 店舗cd) as ta1, 発注テーブル as ta2
where ta1.店舗cd = ta2.店舗cd and ta1.ht = ta2.発注日
ありがとうございます。From文にサブクエリーを入れることができるんですね。勉強させていただきます。
Mr.Tです、こんにちは。
Accessのバージョンは?と聞きたいところですが、
とりあえずAccess2003でやってみた。
SELECT First(サンプルテーブル.[no]), サンプルテーブル.店舗コード, Max(サンプルテーブル.発注日) First(サンプルテーブル.金額) FROM サンプルテーブル GROUP BY サンプルテーブル.店舗コード ORDER BY Max(サンプルテーブル.発注日) DESC
AccessなのでFirst()が使えると思ふ。
Firstというのは初めて聞きました。勉強させていただきます。ありがとうございます。
テーブル名「発注テーブル」,フィールドがそれぞれ連番,店舗,発注日,金額 のかたちのテーブルで,
SELECT [連番],a.[店舗],a.[発注日],a.[金額] FROM [発注テーブル] as a inner join (SELECT [店舗],MAX([発注日]) as c FROM [発注テーブル] GROUP BY [店舗]) as b ON (a.[店舗] = b.[店舗] and a.[発注日] = b.c);
ほかに回答者がいるのでいらんかと思ったけれど,ACCESSで検証までしてもったいなかったので。役に立たなきゃポイント不要。
ありがとうございます。複雑なんですね。SQLは奥が深いですね。
select *
from 発注テーブル
where 連番 in (
select max(連番)
where 発注テーブル
group by 店舗)
これでどうでしょう。
1番の方の回答でなんとかできました。ありがとうございました。
ありがとうございます。こちらの方法で何とかできました。