Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルクエリ 2番目の最大値、最新値 抽出
記事No42734
投稿日: 2011/09/27(Tue) 15:42
投稿者ddd
OS:
Access Version:
Access2007 クエリ 2番目の最大値 抽出条件

以下のようなテーブルがあります。
テーブル1(フィールド※全てテキスト型)
コード|前回日付|前回得点|今回日付|今回得点
AAA| −  | −  |0201|1000
BBB| −  | −  |0301|1500
AAA| p  | r  |    |    
BBB| x  | y  |    |
CCC| −  | −  |0501|1200
CCC| m  | n  |    |

※フォーム1からコード、今回日付、今回得点を入力し、テーブル1にデータを追加していきます。(追加クエリ)

ここで新たにクエリを作成し、
p→0201、r→1000
x→0301、y→1500
m→0501、n→1200
となるように抽出したいのですが、抽出条件の書き方がわかりません...

初心者であるため、SQL等も詳しくないのですが、
このように抽出することは可能でしょうか?
1週間以上悩んでおります・・・
ご教示宜しくお願いします(/_;)

タイトルRe: クエリ 2番目の最大値、最新値 抽出
記事No42735
投稿日: 2011/09/28(Wed) 08:16
投稿者Hank
> テーブル1(フィールド※全てテキスト型)
> コード|前回日付|前回得点|今回日付|今回得点
> AAA| −  | −  |0201|1000
> BBB| −  | −  |0301|1500
> AAA| p  | r  | **** | ****    
> BBB| x  | y  | **** | ****
> CCC| −  | −  |0501|1200
> CCC| m  | n  | **** | ****
****の部分は空白(Null)なんですか?

タイトルRe^2: クエリ 2番目の最大値、最新値 抽出
記事No42736
投稿日: 2011/09/28(Wed) 08:22
投稿者ddd
> > テーブル1(フィールド※全てテキスト型)
> > コード|前回日付|前回得点|今回日付|今回得点
> > AAA| −  | −  |0201|1000
> > BBB| −  | −  |0301|1500
> > AAA| p  | r  | **** | ****    
> > BBB| x  | y  | **** | ****
> > CCC| −  | −  |0501|1200
> > CCC| m  | n  | **** | ****
> ****の部分は空白(Null)なんですか?

****は入力する部分になります。
今回日付と今回得点を入力し、
コードAAAのpとrを抽出したいのですが…

説明が下手ですみません…

タイトルRe^3: クエリ 2番目の最大値、最新値 抽出
記事No42737
投稿日: 2011/09/28(Wed) 09:11
投稿者Hank
> ****は入力する部分になります。
ということは、

> コードAAAのpとrを抽出したいのですが…
抽出ではなく、
 テーブルにその値を持つ新規レコードを追加したい
ということですよね?

テーブル構造が間違っているような気もしますが・・・
追加クエリ
INSERT INTO テーブル1(前回日付, 前回得点)
SELECT 今回日付 AS 前回日付
     , 今回得点 AS 前回得点
  FROM テーブル1
 WHERE 今回日付 = (SELECT Max(今回日付)
                     FROM テーブル1 AS T
                    WHERE T.コード = テーブル1.コード)

タイトルRe^4: クエリ 2番目の最大値、最新値 抽出
記事No42738
投稿日: 2011/09/28(Wed) 09:49
投稿者ddd
すみません。説明し直します。

テーブル1にあるフィールドは以下の通り。
(入力イメージは記事No : 42734 )
コード
今回日付
今回得点
前回日付
前回得点
(その他にもテキスト型、Yes/No型のフィールドがあります。)


フォーム1からコードと今回日付を入力し、テーブル1に追加していく。
(今回得点とその他テキスト型、Yes/No型のフィールドデータはこの時に入力せず、フォーム2から手入力します)

フォーム2はテーブル1の一覧表示をする。

このフォーム2を開いたときに
コードごとの前回日付と前回得点を表示させたい。
(テーブル1のフィールドにもデータが入力されている状態にしたい)
前回日付というのは、今回日付の2番目の最大値で、
前回得点というのは、今回日付の2番目の最大値の今回スコア
というイメージで抽出したいです・・・

テーブル構造が間違っているというご指摘ですが、
どのような構造にしたらこういったイメージのDBが作れますか(T_T)?

長い間試行錯誤しています...
まだデータが少ないので、テーブル構造を変えることも可能です。

ご教示いただけると助かります(T_T)
宜しくお願いします(T_T)!!!

タイトルRe^5: クエリ 2番目の最大値、最新値 抽出
記事No42739
投稿日: 2011/09/28(Wed) 14:26
投稿者Hank
14:30一部修正しました。

> > AAA| p  | r  | **** | ****    
****を入力した後に、p, rを取得したいということですか?

INSERT INTO テーブル1(前回日付, 前回得点)
SELECT 今回日付 AS 前回日付
     , 今回得点 AS 前回得点
  FROM テーブル1
 WHERE 今回日付 = (SELECT Max(今回日付)
                     FROM テーブル1 AS T
                    WHERE T.コード = テーブル1.コード
                          AND
                          T.今回日付 < テーブル1.今回日付)
です。

> テーブル構造が間違っているというご指摘ですが、
> どのような構造にしたらこういったイメージのDBが作れますか(T_T)?

日付
得点
その他のフィールド

というのが一般的なテーブルです。
前回の値を見ながら入力したいということなら、
選択クエリ
SELECT コード
     , 日付
     , 得点
     , DMax("日付"
          , "テーブル1"
          , "日付<'" & 日付 & "' AND コード='" & コード & "'") AS 前回日付
     , DLookUp("得点"
             , "テーブル1"
             , "日付='" &  DMax("日付"
                              , "テーブル1"
                              , "日付<'" & 日付 & "' AND コード='" & コード & "'") 
             & "' AND コード='" & コード & "'") AS 前回得点
 FROM テーブル1  
で、可能です。

 
 

タイトルRe^4: クエリ 2番目の最大値、最新値 抽出
記事No42743
投稿日: 2011/09/30(Fri) 16:32
投稿者ddd
****を入力後、pとrを抽出する方法を
何度も試してみましたが、
なんだかうまくいかず・・・

ご指摘頂いたテーブル構造を訂正しました。
(前回日付と前回受験日のフィールドを削除)
試してみたら、一度でうまくいきました。
テーブル構造のご指摘とSQLありがとうございました!

助かりました(T_T)
本当にありがとうございます。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る