我有一个带有温度值和日期的表tem_data
create table tem_data (id int not null, value float, date datetime);
仅当温度改变时,才插入新值。例如
t date
15 12.09.2013
17 15.09.2013
23 19 09.2013
第二个表是要报告的天数
create table rDays(rDay datetime);
rDay
12.09.2013
13.09.2013
14.09.2013
16.09.2013
17.09.2013
18.09.2013
23.09.2013
它的所有行都应该在报告中,因此,我希望将rDays中的所有天都作为温度值。
date t
12.09.2013 15
13.09.2013 15
14.09.2013 15
16.09.2013 17
17.09.2013 17
18.09.2013 17
23.09.2013 19
select rDay,t from tem_data, rDays where ... ? , only ansi sql
干得好。请注意,您的上限是a>
和not >=
。如果确实需要BETWEEN
,则必须从结束日期中减去一个,我认为这是不必要的,因为它将不会显示。
WITH t AS (
SELECT date as start_date
, coalesce(lead(date) over (order by date)
, convert(datetime, '12/31/9999')) as end_date
, value
FROM tem_data
)
SELECT rDays.rDay
, value
FROM rDays
INNER JOIN t
ON t.start_date <= rDay
AND t.end_date > rDay
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句