Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date accessversion2000&;2013 SQL pull最新日期,MAX不';行不通_Date_Ms Access - Fatal编程技术网

Date accessversion2000&;2013 SQL pull最新日期,MAX不';行不通

Date accessversion2000&;2013 SQL pull最新日期,MAX不';行不通,date,ms-access,Date,Ms Access,我有一个表格,需要从不同的类别中提取最新的日期,并且该日期可能并不总是被填写。我已经尝试使用最大值、最小值等。它不起作用 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

我有一个表格,需要从不同的类别中提取最新的日期,并且该日期可能并不总是被填写。我已经尝试使用最大值、最小值等。它不起作用

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])
非常感谢您的帮助

使用新西兰功能:

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的序列(您似乎称之为一个类别)。

< P>当您编写应该是简单查询的问题时(SQL DML),那么您应该考虑到可能存在设计缺陷(在SQL DDL中)。 缺少的值导致您避免使用
MAX
set函数,并迫使您在查询中处理空值(注意
NZ()
函数将导致Access UI之外的错误)。最好通过不向表中添加行来建模缺失的数据。想一想:你想要数据库中尽可能少的数据,你可以推断出剩余的数据,例如,如果Joe没有在1月1日、1月2日、1月3日和1月4日等进行游戏,那么就不要为所有这些日期向你的数据库添加任何内容

以下SQL DDL需要ANSI-92查询模式(但您可以使用Access GUI工具创建相同的表/视图):


若要查找玩家缺少的序列值,请创建一个包含所有可能序列号的表
{1,2,3}
,您可以“反加入”(例如
不存在
)。

非常感谢Nz函数工作得非常好;)如果你对我的回答竖起大拇指,我将不胜感激。
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 );