【发布时间】:2020-03-03 08:49:55
【问题描述】:
我有一个问题,我有一个重要性表。但是这些值之间的差异是 3 天。
select
er.name,
er.temp as real_temp,
der.temp as old_temp
from TEMPR_SILO er
left join TEMPR_SILO der
on er.name = der.name
where der.ID_TRANS in (select max(ID_TRANS) - 72 from TEMPR_SILO)
and er.ID_TRANS in (select max(ID_TRANS) from TEMPR_SILO)
NAME REAL_TEMP OLD_TEMP
SENSOR0001 7.98 9.66
SENSOR0002 8.04 9.91
SENSOR0003 7.91 0.41
SENSOR0004 9.54 -0.27
SENSOR0005 9.85 -1.09
SENSOR0006 9.35 -1.59
SENSOR0007 8.54 -1.34
也就是说,在答案中我有传感器的名称,并且温度是真实且旧的,已经 3 天了。我有一个问题,如果温度降到 5 度,我是否可以这样做,然后我有一个备用的 ALARM 表,
INSERT INTO ALARM ( NAME, INFO) VALUES ( er.name ,'The temperature has greatly changed')
【问题讨论】:
-
WHERE 子句中的 der 条件使得 LEFT JOIN 返回常规的 INNER JOIN 结果。如果您想要真正的 LEFT JOIN 结果,请将该条件移至 ON 子句。
-
@jarlh 是的,我明白这一点,但 ID_TRANS 每小时增加 1。所以我使用 where。答案是真的!
-
然后切换到 INNER JOIN,让包括我在内的所有人的代码更清晰。