sql - 用 SQL 比较两个表

标签 sql sql-server

很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。为了帮助澄清这个问题,以便它可以重新打开, visit the help center




10年前关闭。




我有两张 table ;一个是运算符(operator)记录的记录,另一个是运算符(operator)正在运行的机器存储的数据,以记录机器的停机时间。来自运算符(operator)的数据是机器运行的每小时最低记录(有时更多)。为停机而存储的数据是机器停机或运行时的持续数据记录流。

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

我的 SQL 知识不是那么广泛,所以我什至不知道这是否可能。我曾尝试计算每小时的项目数并对数据进行分组,但未能成功地让它们发挥作用。

这些表驻留在 Microsoft SQLExpress 2008 数据库中。 table 本身很长。

运算符(operator)表:
日期时间 Product_No Seq DateCode Internal_DateCode&ProductNo Product_Description Line Size Weight1 Weight2 Weight3 Weight4 WeightXR LSL_WT TAR_WT USL_WT LABEL MAV

11 年 8 月 3 日 0:37:54 1234567 23 DateCode Internal_DateCode&ProductNo 产品描述 L-1A 50 1575 1566 1569.5 1575.5 1573.4 1550.809 1574.623.4.155A 3405 1575A

停机时间表:

Line_Name Machine_Name t_stamp 类次详情持续时间
R2 转换 9/3/11 22:17 53
R2 填料 9/3/11 23:10 17

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

目标:找出运算符(operator)称重的时间和没有称重的时间。找出机器停机的时间以及它们处于事件状态的时间。将运算符(operator)未称重的时间与机器处于事件状态的时间进行比较,并确定机器是否正在运行,但没有运算符(operator)记录应在何时进行称重。

最佳答案

假设:
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) 任务在某种程度上是基于时间的——也就是说,报告是针对某个特定时间段的。在我的示例中,我将选择九月。

任务 1:找出运算符(operator)称重的时间和没有称重的时间。
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:将运算符(operator)未称重的时间与机器处于事件状态的时间进行比较,并确定机器是否正在运行但没有运算符(operator)记录应在何时进行称重。

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

关于sql - 用 SQL 比较两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533319/

相关文章:

mysql - Geo SQL 查找位置附近的点

mysql - 不创建适当的表存储数据的优点和缺点是什么?

mysql - 在子查询中实现 WHERE 子句来获取数据透视列的值?

sql - 如何强制 MS SQL Server 执行索引连接?

c# - TSQL - 选择插入的行

sql-server - 使用 DataGrip 连接到 Azure 数据库 - Active Directory

sql - 使用 WHERE 子句连接多个表

sql子查询与内连接的问题

sql - 这条SQL语句是什么意思?

sql - 是否可以从键/值对更新行?