2016-09-29 4 views
0

私は異なるカテゴリから最新の日付を取得する必要があり、日付が記入されていない可能性があります。 MAX、MINなどを使用しようとしましたが、これはうまくいきませんでした。アクセスバージョン2000年と2013年のSQL pull latest date、MAXは機能しません

e.g. ID 1st Game Date 2nd Game Date 3rd Game Date 
    Joe  6/1/16   missing  missing 
    Anna  missing  7/2/16  7/6/16 
    Rita  missing  7/31/16  missing 

は返す必要があります:

ID  Date 
    Joe  6/1/16 
    Anna  7/6/16 
    Rita  7/31/16 

私はうまく機能し、このSQLを持っていますが、それはそれは、最新の日付返さないすべての日付は、他の賢明でいっぱいにする必要があり:

をすべてのあなたの助けを事前に
ApptDate: Switch([Pt1stApptDate]>=[2ndApptDate] And [Pt1stApptDate]>= 
[3rdApptDate],[Pt1stApptDate],[2ndApptDate]>=[Pt1stApptDate] And [2ndApptDate]>= 
[3rdApptDate],[2ndApptDate],[3rdApptDate]>=[Pt1stApptDate] And [3rdApptDate]>= 
[2ndApptDate],[3rdApptDate]) 

多くの感謝

答えて

0

使用のNz機能:

ApptDate: Switch(Nz([Pt1stApptDate],0)>=Nz([2ndApptDate],0) And 
Nz([Pt1stApptDate],0)>= Nz([3rdApptDate],0), Nz([Pt1stApptDate],0), 
Nz([2ndApptDate],0)>=Nz([Pt1stApptDate],0) And Nz([2ndApptDate],0)>= 
Nz([3rdApptDate],0),Nz([2ndApptDate],0), 
Nz([3rdApptDate],0)>=Nz([Pt1stApptDate],0) And Nz([3rdApptDate],0)>= 
Nz([2ndApptDate],0),Nz([3rdApptDate],0)) 

あなたのテーブルのデザインは正しくありません。 あなたは別々の行にIDごとに各ApptDateを格納する必要があります。

ApptID ID ApptDate ApptNr 
1 Joe  6/1/2016 1 
2 Anna 7/2/2016 2 
3 Anna 7/6/2016 3 
4 Rita 7/31/2016 2 

ApptIDが自動採番で、ApptNrはIDごとのシーケンス(カテゴリを呼んでいるように見える何)であるのに対し。

+0

soooo多くのNz関数が完璧に働いてくれてありがとうございます;) – Ella

+0

私の答えのための親指は、高く評価されます。 – Rene

+0

2 Big Thumbs Up !!!!! – Ella

-1

単純な問合せ(SQL DML)を作成する際に問題が発生する場合は、(SQL DDL内に)設計上の欠陥があると考える必要があります。

値がないと、MAX機能が無効になり、クエリでNULLを処理するように強制されます(NZ()関数はAccess UI以外のエラーを引き起こすことに注意してください)。テーブルに行を追加しないだけで、欠けているデータをモデル化する方がよい。それについて考えてみましょう。データベースで可能な最小のデータ量を望み、残りの部分を推論することができます。ジョーが1月1日と2月1日、3月1日と4月1日などでゲームをしていなかった場合は、これらの日付のデータベースに何も追加しないでください。

次のSQL DDLは、ANSI-92クエリモードを必要とする(ただし、アクセスGUIツールを使用して同じテーブル/ビューを作成することができます):

CREATE TABLE Attendance 
(gamer_name VARCHAR(35) NOT NULL REFERENCES Gamers (gamer_name), 
    game_sequence NOT NULL CHECK (game_sequence BETWEEN 1 AND 3) 
    game_date DATETIME NOT NULL, 
    UNIQUE (game_date, game_sequence)); 


INSERT INTO Attendance VALUES ('Joe', 1, '2016-06-01'); 
INSERT INTO Attendance VALUES ('Anna', 2, '2016-07-02'); 
INSERT INTO Attendance VALUES ('Anna', 3, '2016-07-06'); 
INSERT INTO Attendance VALUES ('Rita', 1, '2016-07-31'); 


CREATE VIEW MostRecentAttendance 
AS 
SELECT gamer_name, MAX (game_date) AS game_date 
    FROM Attendance 
GROUP 
    BY gamer_name; 


SELECT * 
    FROM Attendance a 
WHERE EXISTS (SELECT * 
        FROM MostRecentAttendance r 
       WHERE r.gamer_name = a.gamer_name 
         AND r.game_date = a.game_date); 

プレーヤーのために欠落しているシーケンス値を見つけるには、テーブルを作成します可能なすべてのシーケンス番号{ 1, 2, 3 }のうち、「反結合」することができます(例:NOT EXISTS)。

関連する問題