我对SQL Server有问题。我有一个带有机器语句的表,另一个带有生产数据的表。两个表之间的时间不相同,以获取相应的数据。我不知道如何加入这些表格。另外,我只需要过滤表A中的代码17。
例如:
表a :
Machine Code Time
----------------------------------
EPSX 17 2018-08-28 12:09:32
EPSA 19 2018-08-28 12:09:39
EPSC 17 2018-08-28 11:10:58
表b :
Machine Waste(meters) Time
-------------------------------------------
EPSX 57m 2018-08-28 12:09:38
EPSA 128m 2018-08-28 12:09:43
EPSC 12m 2018-08-28 11:11:02
所需的输出:
Machine Code Waste(meters)
----------------------------
EPSX 17 57m
EPSC 17 12m
我正在考虑通过以下陈述获得这种关系:
a.Machine = b.machine (this is easy)
AND a.Time > b.Time
AND a.Time <= DATEADD(MINUTE, 2, b.Time)
我该如何解决?也许使用功能?我可以直接从表b的函数中获取正确的信息。但是我可以调用Table a并在函数调用中使用a.Time吗?
答案 0 :(得分:0)
如果您知道时间戳总是只有一点点,那么您可以将时间四舍五入到最接近的分钟(用谷歌搜索),并将四舍五入的时间用作表格之间的FK。
答案 1 :(得分:0)
表a
中EPSX
的时间是2018-08-28 12:09:32
,表b
2018-08-28 12:09:38
中的时间是a.time < b.time
,但是您正在测试{ {1}}。这行不通。更改为
a.Time > b.Time AND a.Time <= DATEADD(MINUTE, 2, b.Time)
或者您可以将其转过来进行测试
a.time BETWEEN DATEADD(MINUTE, -2, b.Time) AND b.time
在一起
b.time BETWEEN a.time AND DATEADD(MINUTE, 2, a.Time)
答案 2 :(得分:0)
select *
from tableA a cross apply (
select top 1 waste from tableB b
where b.Machine = a.Machine and b.Time >= a.Time
order by b.Time
) c
where a.Machine = 17;
我通常会尽量避免使用top
,但我会继续提供它作为一种简单的解决方案。