Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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_Sql Server - Fatal编程技术网

使用SQL比较两个表

使用SQL比较两个表,sql,sql-server,Sql,Sql Server,我有两张桌子;一个由操作员记录记录,另一个由操作员运行的机器存储数据,以记录机器的停机时间。来自操作员的数据是机器运行时每小时至少一个记录(有时更多)。当机器停机或运行时,为停机存储的数据是一个恒定的数据记录流 我想做的是从操作员那里获取数据,并将其与停机时间系统进行比较,以确保操作员每小时(每小时一次)测量体重,确保机器正常运行。如果机器停机一小时,则不会有操作员记录。如果机器在小时间隔内的任何时间内处于活动状态,则应记录该小时间隔。为此,我需要将每个表的数据简化为每小时一条记录,并比较两个表

我有两张桌子;一个由操作员记录记录,另一个由操作员运行的机器存储数据,以记录机器的停机时间。来自操作员的数据是机器运行时每小时至少一个记录(有时更多)。当机器停机或运行时,为停机存储的数据是一个恒定的数据记录流

我想做的是从操作员那里获取数据,并将其与停机时间系统进行比较,以确保操作员每小时(每小时一次)测量体重,确保机器正常运行。如果机器停机一小时,则不会有操作员记录。如果机器在小时间隔内的任何时间内处于活动状态,则应记录该小时间隔。为此,我需要将每个表的数据简化为每小时一条记录,并比较两个表上每小时都有一条记录

我的SQL知识没有那么广博,所以我甚至不知道这是否可行。我曾尝试每小时计算项目数并对数据进行分组,但未能成功地使它们工作

这些表位于Microsoft SQLExpress 2008数据库中。桌子本身很长

操作员表: 日期时间产品编号序号日期代码内部日期代码和产品编号产品描述行大小权重1权重2权重3权重4权重XR LSL\U WT TAR\U WT USL\U WT LABEL MAV

2011年8月3日0:37:54 1234567 23日期代码内部日期代码和产品无产品说明L-1A 50 1575 1566 1569.5 1575.5 1573.4 1550.809 1574.623 1598.437 1564.623 1525.507 L-1A50

停机时间表:

行\u名称机器\u名称t\u戳记轮班明细持续时间 R2转换2011年9月3日22:17 53 R2加油口9/3/11 23:10 17

感兴趣的机器是“填充器”,持续时间是机器停机的时间量(以分钟为单位)

目标是:找出操作员在哪些小时内进行了举重,哪些小时没有进行。了解机器停机的时间以及它们处于活动状态的时间。将操作员未称重的时间与机器处于活动状态的时间进行比较,确定机器是否正在运行,但没有操作员记录应称重的时间。

假设: 1) 如果日期和时间是实际的日期和时间格式,则会有所不同。但是在不知道的情况下,我会猜测它们是字符串(否则,为什么要让它们成为两列?),所以我会猜测它们分别是YYYY-MM-DD和HH:MI

2) OP希望通过班次、产品或其他方式了解这些事实,这似乎是合理的。仅仅问他们什么时候测量过任何东西的重量似乎很奇怪。我猜这是由ProductNo引起的

3) 这可以在代码中完成,但如果我创建一个包含小时的表,我的示例会更简单:

create table hours (hr varchar(2));
insert into hours ('01');
insert into hours ('02');
insert into hours ('03');
insert into hours ('04');
etc.
4) 任务在某种程度上是基于时间的——也就是说,报告针对某个特定的时间段。在我的示例中,我将选择9月份

任务1:找出操作员称重的时间和未称重的时间

select h.hr, o.productno, count(*) as nbr
from hours h
  left outer join operator o
    on h.hr = substr (o.time, 1, 2)
where o.date between '2011-09-01' and '2011-09-30'
group by h.hr, o.productno
这应显示小时列表,如果进行了测量,则应显示该产品在该小时内进行测量的次数否。如果没有测量,productno将是空白的,因为外部连接,我猜这是OP忘记的

任务2:找出机器的停机时间和活动时间

我不想继续,除非OP给了我一些关于我假设的线索。 事实上,我很有可能完全是在浪费时间

任务3和4:将操作员未称重的时间与机器处于活动状态的时间进行比较,确定机器是否在运行,但没有操作员记录应称重的时间

我不想继续,除非OP给了我一些关于我假设的线索。
事实上,我很有可能完全是在浪费时间。

您是否对“每小时一小时”(分析严格按小时分组,不考虑实际分钟)或“每小时一次,或多或少”(分析关注条目之间的间隔,加上或减去一些错误)感兴趣。另外,您的RDBMS是什么,因为答案可能取决于实现。谢谢您的帮助。我添加了一些示例数据以查看。最终,我们不关心假设一的产品编号等细节,但这种转变可能更有用。由于重量是在填充器处测量的,因此感兴趣的机器是“填充器”机器。然而,“转换”也会影响填充器,因此需要查看停机表中的两台机器。再次感谢您迄今为止的帮助。