• 締切済み

Accessで最新データを取得する方法

Accessで最新日時のデータを取得できるクエリを作りたいです。 例えば以下のようなデータを、、、 ------------------------------------------ 社員  売上日時  売上金額 Aさん  2015/12/10 50,000 Aさん  2015/12/25 35,000 Bさん  2015/12/15 40,000 Bさん  2015/12/28 60,000 Cさん  2015/12/13 90,000 Cさん  2015/12/28 50,000 ------------------------------------------ 以下のようにして取得したいです。 ------------------------------------------ 社員  売上日時  売上金額 Aさん  2015/12/25 35,000 Bさん  2015/12/28 60,000 Cさん  2015/12/28 50,000 ------------------------------------------ 現状のクエリですと古い日時のデータを引っ張り出してきてしまい、 困っています。。。 どのようなクエリを組めば最新日時のデータを取得できるように なりますでしょうか。 ご教示いただけますと幸いです。

みんなの回答

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.6

これでどうでしょうか。 SELECT [テーブル].社員, [テーブル].売上日時, [テーブル].売上金額 FROM(SELECT [テーブル].社員, Max([テーブル].売上日時) AS 売上日時の最大 FROM テーブル GROUP BY [テーブル].社員) as Q INNER JOIN テーブル ON ([Q].売上日時の最大 = [テーブル].売上日時) AND ([Q].社員 = [テーブル].社員); 上記をクエリのSQLに貼り付け後、デザインで見るとこんな感じです。 要するに、社員をグループ化して売上日時の最大を取得するクエリ(Q)に 当該テーブルを紐付けてます。

  • panacon
  • ベストアンサー率31% (214/679)
回答No.5

mamason さんへ 私のほうはすらすらとSQLを書くことが出来ないので、szo_orz さんの回答された方法を選択しますが、クエリの集計のグループ化のクエリを作って、元のテーブルに社員と日付の両方で接続します。

回答No.4

訂正: X 残念なことにWHERE節を指定できません。 O 残念なことにORDER BY 句を指定できません。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

http://www.wanichan.com/pc/access/2010/5/20.html に、本質問とそっくりな例の解説があるのでは。 >最新日時のデータ は、アクセスの日付のデータが、中身的には「整数」(時刻がついておれば小数点数となる)日付順序の整数で持っているので、「最近とは」最大整数のデータ行を求めることと同じになる。 その場合、各社員1人の中での限定で考えるべきなので、そういうように考えるのが、(SQLなどよか、他のデータベース言語でも)「グループ化」といわれる。 Googleで「SQL グループ化」「アクセス グループ化」で照会して勉強のこと。 参考 http://kaya-soft.com/sqlserver2008-toranomaki/beginner/groupby/ SQLはアクセスのクエリと基本的に同等の機能だからね。 参考 https://support.microsoft.com/ja-jp/kb/210276 日付のデータ型が、もし文字列型である場合は、日付文字列の大小が暦的に大小(前後)と一致するか注意して考えるてみること。

回答No.2

【邪道といえば邪道。が、簡単といえば簡単】 SELECT  DISTINCT 社員,  DBLookup("SELECT 売上日時 ・・・ 売上日時 DESC") AS 売上日時,  DBLookup("SELECT 売上金額 ・・・ 売上日時 DESC") AS 売上金額 FROM 売上履歴 ORDER BY 社員; DLookup()内のSQL文は次のようです。 SQL文1="SELECT 売上日時 FROM 売上履歴 WHERE 社員='" & [社員] & "' ORDER BY 売上日時 DESC" SQL文2="SELECT 売上金額 FROM 売上履歴 WHERE 社員='" & [社員] & "' ORDER BY 売上日時 DESC" 要は、 SELECT DISTINCT 社員 FROM 売上履歴 ORDER BY 社員; というSQL文の実行結果 =================================== Aさん Bさん Cさん =================================== に、該当する売上日時と売上金額とをアペンドして結果を得ようというものです。さて、その場合に真っ先に思いつくのがDLookup()ですが、残念なことにWHERE節を指定できません。そこで、DBLookup()を自作することで無理を通してしまいます。 Public Function DBLookup(ByVal strQuerySQL As String, _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim rst As ADODB.Recordset   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function まあ、邪道といえば邪道。が、簡単といえば簡単。そんな回答です。

noname#231195
noname#231195
回答No.1

2段階に分けて2つクエリを作るといいです。 ところで同じ日の同じ社員のレコードが複数あるということはないでしょうね? もしあるなら、どちらを表示させるのかわからないので、なんともクエリを作りかねます。 以下は、同じ日の同じ社員のレコードはただ一つである、という前提で書きます。 第一段階は、社員でグループ化して売り上げ日時の最大値をとるクエリを作ります(ここでは仮に名前をqryx01とします)。集計クエリと呼ばれる種類のクエリになります。 この説明でどんなクエリかイメージできなければ、クエリの表示をSQLにして以下のSQLを張り付けてください。テーブルの名前はtblX01としてあります。 SELECT tblX01.社員, Max([tblX01].[売上日時]) AS 売上日時 FROM tblX01 GROUP BY tblX01.社員; 第二のクエリ(qryx02)は、第一のクエリ(qryx01)にある社員と売り上げ日時の組み合わせと同じレコードを元のテーブル(tblX01)から引っ張ってきます。 SQLならこんな風になります。 SELECT qryx01.社員, qryx01.売上日時, tblX01.売上金額 FROM tblX01 INNER JOIN qryx01 ON (tblX01.売上日時 = qryx01.売上日時) AND (tblX01.社員 = qryx01.社員); SQLビューについてはこの↓ページに「AccessでSQL文の表示」というタイトルで四角にかこった場所にどう切り替えるのか書いてあります。2007以降でも同じところにあります。 http://www.ikari24.com/db/access2.html 私の張り付けたSQLをお手元のデーターベースでSQLビューに張り付け(テーブルの名前は変える必要があります)、クエリのデザインビューに戻せば普通のクエリビルダでどう作っているのかわかります。

関連するQ&A

  • アクセス2010 最新データを抽出する方法

    はじめまして。 アクセスを猛勉強中の初心者です。 過去記事を探しましたが、解決できませんでしたのでご教示お願いします。 やりたいことは、2つのテーブルからクエリを使って、最新のデータを抽出したいです。 ですが、その中に抽出したくないワードが存在します。 それ以外のワードで最新のデータを抽出したいです。 まず、下記のような2つのテーブルがあります。 ●テーブル1        ・ID(主キー)       ・日付 ・コメント ・顧客ID ●テーブル2 ・顧客ID(主キー) ・顧客名 ・住所 次にこのテーブルをクエリにしてデータを返すと、下記のようになります。 日付    コメント      顧客名    ・2/1     保留       Aさん ・2/1     発送       Bさん       ・2/1     相談       Cさん ・2/2    次回未定     Bさん ・2/3     発送       Aさん  ・2/4    次回未定     Dさん        今回抽出したいデータは、「発送」というワードをはぶいた最新のデータをとりたいということです。 なので、データとしては、 日付    コメント      顧客名    ・2/1     保留       Aさん ・2/1     相談       Cさん ・2/2    次回未定     Bさん ・2/4    次回未定     Dさん と、このように抽出したいのです。 最新データの抽出にはMax関数を使ってでき、いらないワードである「発送」はクエリのフィールドの抽出条件に『<>”発送”』と入力することで抽出を防ぐことができたのですが、これらの方法でMax関数を入れて最新データの抽出をしようとすると、全ての「発送」を除いたデータが抽出されるので、最新データに該当する顧客のデータが消えてしまいます。 なので、本来のコメントデータが分からない状態になります。 また、エクセル側でパラメータクエリを使って資料を作成し、アクセスに触ったことがない人たちが使用するので、アクセスを更新してといったことができません。 なので、更新クエリなどを使ってのやり方以外の方法はないでしょうか? 全くの初心者ですので、言葉足らずで説明が分かり辛くて申し訳ありません。 ご教示をお願いいたします。

  • 顧客と商品ごとに購入日時が最新のデータを取得したい

    お世話になります。 以下のテーブル1からサンプル1のようなデータを抽出したいのですが、SQLはどのように書いたらよいでしょうか。 ・顧客と商品ごとに購入日時が最新のデータを取得 ・商品は左側の番号が同じ場合は購入日が最新のデータのみ抽出したい データベースは MySQL5 です。 よろしくお願いいたします。 ●テーブル1 顧客  商品  購入日時 ---------------------------------  A  2-2  2014-04-23 08-00-00  A  2-1  2014-04-21 08-00-00  B  2-3  2014-04-20 09-00-00  B  2-2  2014-04-18 06-00-00  B  2-1  2014-04-15 05-00-00  A  1-3  2014-04-12 08-00-00  A  1-2  2014-04-10 04-00-00  C  2-2  2014-04-09 05-00-00  C  2-1  2014-04-08 06-00-00  C  1-2  2014-04-07 08-00-00  C  1-1  2014-04-06 05-00-00  A  1-1  2014-04-05 02-00-00  B  1-2  2014-04-04 02-00-00  B  1-1  2014-04-03 01-00-00 ●サンプル1 顧客  商品  購入日時 ---------------------------------  A  2-2  2014-04-23 08-00-00  B  2-3  2014-04-20 09-00-00  A  1-3  2014-04-12 08-00-00  C  2-2  2014-04-09 05-00-00  C  1-2  2014-04-07 08-00-00  B  1-2  2014-04-04 02-00-00

    • ベストアンサー
    • MySQL
  • Access2000のデーター集計

    Access2000の二つのクエリーのデーターをくっつけて金額を集計したいのですが、どなたか教えていただきませんか? クエリー1 データA、データB、金額 データC、データD、金額 クエリー2 データA、データB、金額 データE、データF、金額 集計結果クエリー データA、データB、金額 データC、データD、金額 データE、データF、金額 宜しくお願いします。

  • 最新データ取得

    いつもお世話になります。 Access 2007のコードを教えていただきたいです。 Access で社員単価管理を作成しています。 クエリで社員の単価を計算させて、日報フォームに表示させることができました。以下のコードで If Not IsNull(Me![個人ID]) Then Me![工数単価] = DLookup("日給", "Q_社員別給与最新日付", "[個人ID]=" & Me![個人ID]) End If 社員の単価は上がる場合がありますので、社員単価入力テーブルから最新の日付のデータを取得するため、クエリを作成しました。 これでうまく行くと思ったら、問題発生しております。 日報フォームのデータを修正する時、最新日付の単価も変わってしまいます。 うまく説明できないですので、以下のようです 社員単価入力テーブル 日付     個人ID 原価金額 20110401   01    6400 20110701   01    8000 日報フォーム 日付    個人ID 出勤時間 退勤時間 工数 残業 日給 20110630   01    8:00    18:00    1   1  7200   20110701   01    8:00    17:00    1   0  8000 データ修正後 日付     個人ID 出勤時間 退勤時間 工数 残業 日給 20110630   01    8:00    17:00    1   0   8000 データ修正後に表示してほしいのは 日付   個人ID 出勤時間 退勤時間 工数 残業 日給     20110630  01   8:00     17:00   1   0   6400 つまり、 社員単価入力テーブルの日付<日報フォームの日付なら、最新の日付のデータで計算してほしいです。そうではない場合、最新日付より前のデータで計算するというコードが書きたいですが、どういう風にに書けばいいか全く、わかりません 教えて下さい。 よろしくお願いします。

  • 区分ごとに2番目に新しいデータを取得するには?

    下記のようなデータがあった場合、それぞれの区分毎に年月が最新のデータと2番目に最新のデータを取得したいです。 <検索対象データ> 区分 年月   金額 ----------------------------- A   200411  700 A   200412  600 A   200503  560 B   200311  600 B   200508  1000 B   200504  560 C   200508  400 C   200301  1100 <取得したいデータ> (1)区分ことに年月が最新のデータ 区分 年月   金額 ----------------------------- A   200503  560 B   200508  1000 C   200508  400 (2)区分ことに年月が2番目に最新のデータ 区分 年月   金額 ----------------------------- A   200412  600 B   200504  560 C   200301  1100 (1)に関してはこちらに回答があります。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1439772 (2)のデータを取得する方法を教えていただきたい。 (1)と(2)の混在でもかまいません。 よろしくお願いします。

  • MAX値を条件にデータを取得するには?

    SQL文で困っています。 ご教授下さい。 下記のようなデータがあった場合、それぞれの区分毎に 年月が最大(最新)のデータを取得したいです。 (実際には1レコードにその他項目があり、それらも取得します。) <検索対象データ> 区分 年月   金額 ----------------------------- A   200412  600 A   200503  560 B   200311  600 B   200508  1000 B   200504  560 C   200508  400 C   200301  1100 <取得したいデータ> 区分 年月   金額 ----------------------------- A   200503  560 B   200508  1000 C   200508  400 よろしくお願いします。

  • Accessで最新のレコードを抽出するには

    お世話になります。 このようなテーブルがあるとします。 No|日時     | 部門  | 更新内容  --+------------+--------+---------- 1 |04/12 12:21:35| A部門 | 更新C 2 |04/07 09:15:05| B部門 | 更新う 3 |04/19 08:23:45| A部門 | 更新A 4 |04/05 10:15:20| B部門 | 更新あ 5 |04/20 09:20:13| B部門 | 更新い 6  |04/02 09:20:15| A部門 | 更新B この中から部門毎にグループ化して 部門毎に日時の最新のデータ No|日時     | 部門  | 更新内容  --+------------+--------+---------- 3 |04/19 08:23:45| A部門 | 更新A 5 |04/20 09:20:13| B部門 | 更新い を抜き出すクエリの作り方を教えてください。 ちなみに今困っているDBの更新内容に相当するフィールドは50フィールドほどあります。 よろしくお願いします。 多分クエリの集計を使用すると思っています。 多少ですがSQLわかります。 多少ですがVBAわかります。

  • ACCESSで重複するデータをまとめたいのですが

    ACCESS超初心者です。 ヘルプを見たのですが解決できなかったので、ご質問させてください。    フィールド        フィールド1 フィールド2 田中  A        田中 A       B 田中  B    →   鈴木 A 鈴木  A        佐藤 C 佐藤   C ACCESSで上記のようにデータをまとめたいのですが どのようなテーブル、クエリを組めばよいでしょうか? ご教示願います

  • Accessを使って複数データをまとめたい

    エクセルの2つのシート、A店の売上データ、B店の売上データを一つのシートにまとめて 且つ、売上金額を商品ごとにまとめ、商品コードの一覧表に紐づけたいのですが やり方が分からずにいます。(データをインポートして都度使えるようにしたいのですが) A店売上データ えんぴつ 2本 200円 消しゴム 1個  100円 ものさし 3個  30円 ・ ・ ・ B店売上データ えんぴつ 1本 100円 消しゴム 1個  100円 のり   2個  20円 ・ ・ ・ (1)この2つのデータをまずは下記のようにまとめたい えんぴつ 3本 300円 消しゴム 2個  200円 ものさし 3個  30円 のり   2個  20円 ・ ・ ・ (2)次に商品コードのあるシートと紐づけしたい 商品コード 商品 購入数 合計金額 A252 えんぴつ 3本  300円 C300 消しゴム 2   200円 GH01 ものさし 3   30円 XX01 のり   2     20円 ・ ・ ・ A店売上データ B店売上データ 商品コードのあるデータシートは それぞれテーブルを作りましたが(テーブルが3つある状態) リレーションをどう組んで そのあと、追加クエリかユニオンクエリにしたほうがいいのか悩んでます。 また、A店売上データ、B店売上データを 組んでひとつにまとめたクエリをテーブルにして 商品コードのあるテーブルと紐づけたいと思いましたが やり方があまりわかりません。 作業自体はさほど難しくなさそうに感じるのですが やり方が飲み込めないでいます。 すみませんが、わかりやすく教えていただけると大変助かります。 教えて頂けますようお願いいたします。  

  • Accessのデータの作り方を教えてください。

    Accessでデータが思ったように作れないので、教えていただけないでしょうか。 Excelのデータをテーブルにインポート: 縦(列)に「店コード」が1~10まであり、次の列に「店名」があります。その次の列に、商品Aの売り上げ個数が各店に対応してあります。 次の列には商品B、商品C、商品Dまであります。 その商品の単価が、例えば、商品A:¥100 商品B:¥150               商品C:¥200 商品D:¥250 とします。 そのデータをクエリで、 各店のそれぞれの商品の売り上げ個数×商品の値段 というかたりで、買う点のそれぞれの商品の売り上げの値段だけを 表示させたいのですが、できません。 どなたか教えていただけないでしょうか?

専門家に質問してみよう