返回文件没有注意至少X天

时间:2017-07-31 15:32:25

标签: sql ms-access

我们有一个客户数据库,我试图获取所有客户文件,这些文件在三周或更长时间内没有对它们发表评论。

我正在使用两张桌子;文件表,其中包含有关为其分配人员的文件的信息,以及注释表,其中包含数据库中的所有注释。它们通过文件编号字段链接。

如果我想要最后一个音符的文件号和日期,我应该使用什么SQL?

我试过了:

SELECT db_file_notes.file_num, Last(db_file_notes.file_date) AS 
LastOfnote_date, Last(db_file_notes.note_key) AS LastOfnote_key
FROM db_file_notes
GROUP BY db_file_notes.file_num
ORDER BY db_file_notes.file_num, Last(db_file_notes.note_date);

结果查询中有一些文件不应该存在。例如,文件#212720的最后一个音符是在7月28日,但上面的查询返回最后一个音符日期为6/26(前一个音符)。然后是#212781的文件,在7月21日有实际的最后一个音符,但查询返回6/12(自查询返回的那个以来有五个更新的音符)。

上述SQL中没有日期条件,但是如果我添加< = Date() - 21它仍然不正确(212710仍然在那里,最后一个音符为6/26)。有趣的是,如果我在文件编号上添加一个过滤器,只返回单个文件编号,如212720,则最后一个注释日期会正确返回。

我尝试按文件编号排序,然后记录日期,文件编号和记事键(一般假设新记录具有更高的键值)并获得相同的行为。我没有按升序排序然后取最后一条记录,而是尝试排序降序并取第一个;这将返回受上述影响的文件的正确注释,但是新案例存在问题,但现在反过来。

1 个答案:

答案 0 :(得分:0)

样品表:
enter image description here

如果没有引入第二个表格,您可以使用以下任何一个:

这将返回最高分组日期。例如,如果您的最大file_date是12/06/2017,则会返回file_date为12/06/2017的所有记录。

SELECT TOP 1  file_num
            , file_date
            , note_key
FROM        db_file_notes
WHERE       DATEDIFF("d",file_date,DATE())>=21
ORDER BY    file_date DESC  

enter image description here

另一方面,此代码将返回每组数字的最大日期(一组为file_numnote_key

SELECT        file_num
            , MAX(file_date) AS Max_File_date
            , note_key
FROM        db_file_notes
WHERE       DATEDIFF("d",file_date,DATE())>=21
GROUP BY    file_num, note_key

enter image description here

注意:如果字段在所有表格中都是唯一的(或者您只是使用一个表格),则不必使用表格对每个字段名称进行限定。