假设我有一张桌子......
校准:
和另一张桌子......
读数:
定期进行读数...校准(不会改变后续读数,但只是计算校准时读数的关闭程度)很少发生。因此,在任何给定时间,读数都需要通过最新的 CalibrationFactor来纠正。我不需要通过 SELECT语句来完成;我只想让他们在同一行。
所以,我想要一些SELECT会给我: Readings.Date,Readings.Reading,Calibrations.CalibrationFactor 其中CalibrationFactor是最新的,它仍然比Readings.Date早。我在这里查看了一些先前的问题,但我发现的最接近的问题是只能找到最新的校准,句点(SQL join: selecting the last records in a one-to-many relationship)
想法?
答案 0 :(得分:1)
我认为您链接的问题几乎可以为您提供所需的内容 - 但如果您想要其他方式可以尝试(mysql版本)
select reading.dated, reading.reading, (
select factor
from calibration
where calibration.dated < reading.dated
order by calibration.dated desc limit 1
) factor
from reading
请参阅此Sql Fiddle
答案 1 :(得分:0)
好的,我想我想出了调整:
SELECT R.Date, R.Reading, C1.CalibrationFactor
FROM Readings R
JOIN Calibrations C1 ON C1.Date < R.Date
LEFT OUTER JOIN Calibrations C2 ON C2.Date < R.Date AND C1.Date < C2.Date
WHERE C2.Date is NULL
第一个JOIN加入所有日期的校准,在给定阅读日期之前。因此,例如(我将使用日期名称以便于阅读。假设读数是在周一,周二和周三进行的):
R.Date | C1.Date
Friday | Monday
Friday | Tuesday
Friday | Wednesday
第二个LEFT OUTER JOIN再次加入校准,在所有日期(如第一个加入)之前读取日期,但之后日期在C1中...
R.Date | C1.Date | C2.Date
Friday | Monday | Tuesday
Friday | Monday | Wednesday
Friday | Tuesday | Wednesday
Friday | Wednesday | NULL
只有在C2.Date为空时才会出现没有日期,而之后的 C1.Date 和< / em>仍然在读取之前,这意味着C1将是最新的行...因此,“WHERE C2.Date IS NULL”