システムwiki

3番目のクエリによって実行された2つのクエリを実行して、最新の履歴値の単一のデータセットを導出します.

ConradN 受付中 最終更新日:2021-06-16 16:10

MSAccessで作成された3つの別々のクエリがあります.このデータベースには3つのtableが含まれています. 関係の共通鍵はAMA#:

TBL_CAM-MEMBER(キーはAMA#)

です)

TBL_CAM-AMA(キーはAMA#)

TBL_CAM-History(キーはAMA#+日付){このtableには進行中の履歴レコードが含まれています. そのため、連結キーを必要とします.

基本構造は(1つ)CAM-MEMBER->(1)CAM-AMA->(多くの)カム履歴レコード

目標:個人からの1つの統合データセットを1つの単一の統合データセットを作成するために、最新の歴史的エントリから派生しました.

私が試したこと:(1)ユニオンクエリ(2つのtable間の異なる行源の不一致について誤って除外されます.(2)結合データセット全体に対して最大レコードを選択するクエリ.

:(1)AMA#とDateとしての独自の最新の履歴レコードを入手するための照会.(2)すべてのレコードを使用して合成データ・セット・クエリを作成します.(3)2番目のクエリに対して最初のクエリを実行して、メンバーごとに最新の履歴レコードのみを選択し、これらの結果を特定のtableに書き込み/上書きします.

欲望:クエリが1つしかありません.

これは上記の3つのそれぞれのクエリです.

query-1-履歴表を調べて、ユニークなクラブメンバーの最新のエントリを導出します.ユニークなキーは、AMA#+日付(エントリの)の連結です.グループを使用して最大合計を使用して最新のエントリのリストを導出します.

[TBL_CAM履歴]を選択してください.[AMA#]、 MAXOFDATE

としてのMAX([TBL_CAM履歴] .DATE)

[TBL_CAM-history]

から

[TBL_CAM履歴].[AMA#];

query-2-すべてのtableからすべてのレコードを選択し、レポート生成用に1つの大きなtableを作成します. しかし、すべての履歴レコードを含みます.

[TBL_CAM-MEMBER]を選択してください.[AMA#]、 [TBL_CAM-MEMBOR] [FAA#]、 [TBL_CAM-MEMBER] .N_FIRST、[TBL_CAM]メンバー→[TBL_CAM-メンバ] .ADDRESS、[TBL_CAM-メンバー] .ADDRESS、[TBL_CAM]メンバ→[TBL_CAM] .st、[TBL_CAM]-1ember] .zip、[TBL_CAM-MEMBER] .COUNTRY、[TBL_CAM-MEMBOR] .Phone、[TBL_CAM-MEMBER] .EMAIL、[TBL_CAM-MEMBOR].[生年月日]、 [TBL_CAM-member] .ocupation、[TBL_CAM-MEMBER] .ageBlock、[TBL_CAM-MEMBER] .ya、[TBL_CAM-MEMBOR].注[TBL_CAM-MEMBER].作成、[TBL_CAM]-ama amaname、[TBL_CAM-AMA] .amapire、[TBL_CAM-AMA] .APAPAID、[TBL_CAM-AMA] .Date、[TBL_CAM-History] .Date、[TBL_CAM-History] ] .Level、[TBL_CAM履歴] .STATUS、[TBL_CAM履歴] .AMOUNT、[TBL_CAM履歴] .position

[TBL_CAM-MEMBER]の([TBL_CAM-MEMBER]内部結合[TBL_CAM履歴]から.[AMA#]= [TBL_CAM-history].[AMA#])内部結合[TBL_CAM-AMA]オン[TBL_CAM-MEMBER] .[AMA#]= [TBL_CAM-AMA] [AMA#];

query-3-Query-2に対してクエリ-1を実行します.AMA#と日付が一致します.次に、選択した固有レコードを特定のtableに書き込みます.

[QRY_02-完全履歴tableの作成]を選択します.[AMA#]、 [QRY_02-完全な履歴tableの作成] [FAA#]、 [QRY_02-完全履歴tableの作成] .N_FIRST、[QRY_02-完全履歴tableの作成] .N_LAST、[QRY_02-完全履歴tableの作成] .address、[QRY_02-完全履歴tableの作成] .apt_spc、[qry_02-完全な履歴の作成table[QRY_02-完全履歴tableの作成] .st、[QRY_02-完全履歴tableの作成] .zip、[QRY_02-完全履歴tableの作成] .country、[qry_02-完全履歴tableの作成] .phone、[ QRY_02-完全履歴tableを作成する] .Email、[QRY_02-完全な履歴tableの作成].[生年月日]、[QRY_02-完全履歴tableの作成] .ocupation、[QRY_02-完全履歴tableの作成] .age、[QRY_02-完全履歴tableの作成] .agblock、[QRY_02-完全履歴tableの作成] .ya、[qry_02-完全な履歴の作成]table[QRY_02-完全履歴tableの作成].それには[QRY_02-完全履歴tableの作成] .amaname、[QRY_02-完全履歴tableの作成] .ameExpire、[QRY_02-完全履歴tableの作成] .amarole、 QRY_02-完全履歴tableを作成します.AMAPAID、[QRY_02-完全履歴tableの作成] .amaposition、[QRY_02-完全履歴tableの作成] .Date、[QRY_02-完全履歴tableの作成] .Level、[QRY_02]-完全な履歴tableの作成] .Status、[QRY_02-完全履歴tableの作成] ..ARA、[QRY_02-完全履歴tableの作成] .AMOUNT、[QRY_02-完全履歴tableの作成] .Position in [TBL_CAM-ALL]

[QRY_01-最新の履歴ビューの作成]内部結合[QRY_02-完全履歴tableの作成]([QRY_01-最新の履歴ビューの作成]を作成します.[AMA#]= [QRY_02-完全履歴tableの作成].[AMA#]) ([QRY_01-最新の履歴ビューの作成] .maxofdate= [qry_02-完全履歴tableの作成] .date)

[QRY_02-完全な履歴tableの作成] .n_last;

質問:私は、3つのレコードソースすべてから単一のマージされたデータセットを導出するクエリが作成された後、最新のAMA#+日付の履歴値を選択して、単一の単純なクエリが必要です.それらの結果は新しいtableになります.

返信リスト(回答:4)

3 #
DataSor

Conrad、下のクエリで、結果をTBL_CAM-ALLに送信しませんでした.あなたはクエリにあなたの報告書を簡単に基づくことができます.

[TBL_CAM-MEMBER]を選択します.[AMA#]、[TBL_CAM-メンバー].[FAA#]、[TBL_CAM-メンバー].N_FIRST、[TBL_CAM-MEMBER].N_LAST、[TBL_CAM-メンバー].address、[TBL_CAM-メンバー].APT_SPC、[TBL_CAM-MEMBER].ST、[TBL_CAM-MEMBER].SIP、[TBL_CAM-MEMBER].COUNTRY、[TBL_CAM-MEMBER].PHOUN、[TBL_CAM-MEMBER].··、[TBL_CAM-メンバー].[生年月日]、[TBL_CAM-MEMBER].age、[TBL_CAM-MEMBOR].ageblock、[TBL_CAM-メンバー].ya、[TBL_CAM-).メンバー][TBL_CAM-メンバー].[TBL_CAM-AMA][TBL_CAM-AMA][TBL_CAM-AMA][TBL_CAM-AMA][TBL_CAM-AMA][TBL_CAM-AMA][TBL_CAM-AMA]..amposition、[TBL_CAM履歴].Date、[TBL_CAM履歴].Status、[TBL_CAM-History].era、[TBL_CAM-History].AMOUNT、[TBL_CAM-History].Position

([TBL_CAM-MEMBER] INNER JOIN([TBL_CAM history] INNER JOIN([TBL_CAM履歴]]([TBL_CAM-history]グループからのMAXOFDATEとして[AMA#]、MAX([TBL_CAM-history].Date)を選択します.[TBL_CAM履歴] [AMA#])hist on([tbl_cam-history].[AMA#]= hist.[AMA#])および([TBL_CAM-history].date= hist.maxofdate)) TBL_CAM-member].[AMA#]= [TBL_CAM-history].[AMA#])[TBL_CAM-MEMBER]のインナー結合[TBL_CAM-AMA].[AMA#]= [TBL_CAM-AMA] [AMA#]

[tbl_cam-member].n_lastによる順序.

応答3# ->にスキップ
2 #
ConradN

速やかなご返信ありがとうございます.構文と相対的なステートメントを理解したいと思っているように、1つのSQKステートメントを消化するのに少し時間をかけました.私は驚くべきこと、それは実際にはMS-Access Viewに翻訳され、SQLだけではなく翻訳されました.それはそれがtableの関係を反映しているのでそれは私のためのプラスです.この新しいSQLでは、テンポtable(hist)が作成されているように見えることがわかります. 間違いなく、正しい順序付けのための独特の「最近の」日付履歴を導き出す-それはプラスと素晴らしい学習/教育参照です.クエリ自体でそれを埋め込むとは思わなかった.

はい、あなたは命名規則を正しく正しくありません. 通常、OracleまたはMySQLでtableを設定するときに使用したときにこれらの8文字の参照を制限します.15年が経ちました.しかし、私は(私自身のより良い判断に対して)オファーにアクセスする自由を取りました.

年齢と年齢のブロックのためのアドバイスについてDOBは、最初のメンバーシップ設定の必須のフィールドではなく、保険の範囲および一部のサービスアクセスに比べて特定のポリシーが従わなかったことを確認する必要がありました.その場合、年齢または年齢ブロックは、未成年者に対してCOPPA(Child Online Privacy Protection Act)に準拠していることを確実にするための手段として、報告書の出力(紙または形式)の年齢を素早く曖昧にしました.

それは言った、SQLと建設的なアドバイスをありがとう.非常に高く評価されています.

/S/Conrad Nerdahl

応答2# ->にスキップ
1 #
DataSor

Conrad、私は理解しており、規制の遵守のためにデューデリジェンスを文書化することができなければならないことに精通しています.あなたのものはCoppaコンプライアンスのためのものですので私はAMAメンバーシップはアメリカの医療協会ではありません.

あなたがロジックに従うことができたことができて嬉しく、コピーして貼り付けているのではなく試してみました.

4 #
DataSor

Conrad、Yes、これは単一のクエリで行うことができますが、「シンプル」とは思われません.それはあなたが見つけた3つのクエリのためにSQLを提供したことが役立ちます.

サイドノートでは、私があなたが提供したものを消化したとき、私はいくつかの観察と提案をしています.

1.フィールドの説明的な名前を使用します.これは、保持するものを解釈することを容易にしますが、コードにとってより面倒なものにすることもできます.また、特殊文字(#-スペース)と予約語(日付)を使用していますが、アクセスは許可されますが、回避する必要があります.代替案は、予約語を回避しながら文字、数字、およびアンダースコアに限定されたフィールド名を使用し、フィールドのキャプションプロパティを列ヘッダーなどに定義するためのフィールドのキャプションプロパティを設定することです.たとえば、フィールド名のAMAキャプション、CAPTIONのフィールド名と生年月日のためのDOB、キャプションのフィールド名と日付のためのhistdate.

2.フィールド名に基づいて、AgeやAgeBlockなどのいくつかのフィールドには、いくつかの計算値がいくつかあります.これはリレーショナルデータベースでは回避されるはずです.これらの値は必要なときに計算されます.