Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
SQL数据库中的开放日期概述_Sql_Ms Access - Fatal编程技术网

SQL数据库中的开放日期概述

SQL数据库中的开放日期概述,sql,ms-access,Sql,Ms Access,我的数据库结构如下: ID Job ID Person Date Begin End 它记录了不同的人在某些工作上花费的时间,以便计算每个工作上花费的总时间 我想做的是创建一个列表,列出所有尚未输入表中的时隙。或者,也可以列出总时间不等于某个固定时间(比如8小时)的所有日期。由于有多人,所有人都按人分组 不幸的是,我不知道如何开始。有什么想法可以让我走吗 编辑: 样本数据: ID Job ID Person Date Begin

我的数据库结构如下:

ID    Job ID    Person    Date    Begin    End
它记录了不同的人在某些工作上花费的时间,以便计算每个工作上花费的总时间

我想做的是创建一个列表,列出所有尚未输入表中的时隙。或者,也可以列出总时间不等于某个固定时间(比如8小时)的所有日期。由于有多人,所有人都按人分组

不幸的是,我不知道如何开始。有什么想法可以让我走吗

编辑:

样本数据:

ID    Job ID    Person    Date          Begin    End
1     0001      Bob       26/09/2016    08:00    09:00
2     0002      Bob       26/09/2016    09:00    11:00
3     0001      Bob       26/09/2016    11:00    16:00
4     0002      John      26/09/2016    08:00    14:00
5     0003      John      26/09/2016    14:00    14:30
6     0004      John      26/09/2016    14:30    15:00
我要找的是一个查询,它将为我提供:

Person    Date          Begin    End
John      26/09/2016    15:00    16:00
或者,如果不可能:

Person    Date          Missing time
John      26/09/2016    01:00

从给定的一天开始的每一天。

最后一个选项可以简单到:

Select 
    Person, [Date], CDate(#08:00# - Sum([End] - [Begin])) As MissingHours
From 
    JobTable
Group By 
    Person, [Date]
Having 
    CDate(#08:00# - Sum([End] - [Begin])) > #00:00#

最后一个选项可以简单到:

Select 
    Person, [Date], CDate(#08:00# - Sum([End] - [Begin])) As MissingHours
From 
    JobTable
Group By 
    Person, [Date]
Having 
    CDate(#08:00# - Sum([End] - [Begin])) > #00:00#
我想做的是创建一个列表,列出所有尚未输入表中的时隙

创建一个包含所有可能时间段的表(也称为日历表),然后对此表执行“反联接”,例如

SELECT *
  FROM CalendarTable c
 WHERE NOT EXISTS ( SELECT * 
                      FROM MyTable m
                     WHERE c.date BETWEEN m.start_date AND m.end_date );
我想做的是创建一个列表,列出所有尚未输入表中的时隙

创建一个包含所有可能时间段的表(也称为日历表),然后对此表执行“反联接”,例如

SELECT *
  FROM CalendarTable c
 WHERE NOT EXISTS ( SELECT * 
                      FROM MyTable m
                     WHERE c.date BETWEEN m.start_date AND m.end_date );

标记您正在使用的dbms。(在日期/时间方面,许多数据库远远不符合ANSI SQL。)添加示例表数据和预期结果。标记您正在使用的dbms。(当涉及到日期/时间时,它们中的许多都远远不符合ANSI SQL。)添加示例表数据和预期结果。如果没有输入,天会怎么样?它们不会出现在这个查询中,是吗?不会。为此,创建一个返回总列表的查询,并在一个新的查询中使用它,该查询与上面的查询有外部连接。那么没有输入的天数呢?它们不会出现在这个查询中,是吗?不会。为此,创建一个返回总列表的查询,并在一个新查询中使用它,该查询与上面的查询有外部联接。