使用SQL比较两个表

时间:2011-09-23 18:29:13

标签: sql sql-server

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

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

我的SQL知识并不广泛,所以我甚至都不知道这是否可行。我已经尝试过每小时计算一次项目并对数据进行分组,但是无法成功地让它们工作。

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

操作员表: 日期时间Product_No Seq DateCode Internal_DateCode& ProductNo Product_Description线尺寸Weight1 Weight2 Weight3 Weight4 WeightXR LSL_WT TAR_WT USL_WT LABEL MAV

8/3/11 0:37:54 1234567 23 DateCode Internal_DateCode& ProductNo产品说明L-1A 50 1575 1566 1569.5 1575.5 1573.4 1550.809 1574.623 1598.437 1564.623 1525.507 L-1A_50

DOWNTIME表:

Line_Name Machine_Name t_stamp班次详细信息持续时间 R2转换9/3/11 22:17 53 R2 Filler 9/3/11 23:10 17

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

目标:找出操作员在哪些时间内进行了重量测量,以及他们没有使用哪个时间。找出机器停机的时间和活动时间。比较运营商没有采用权重的时间与机器处于活动状态的时间,并确定机器是否正在运行但是应该存在权重的操作员记录。

1 个答案:

答案 0 :(得分:1)

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

2)OP希望通过SHIFT或PRODUCT或其他方式了解这些事实似乎是合理的。只要问他们何时取得任何重量,这似乎很奇怪。我猜它是由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给出了一些关于我的假设的线索。 事实上,我很有可能完全浪费时间。