有两个表,结构是这样的:
表1,降水表:
日期,县名,24小时降水,48小时降水,72小时降水
表2,温度表
日期,县名,24小时温度,48小时温度,72小时温度如果把两个表边成一个表,结构如下:
日期,县名,24小时降水,48小时降水,72小时降水,24小时温度,48小时温度,72小时温度两个表中的日期有可能不一致,有可能一个是今天的,一个有可能只更新到前几天,筛选出公共的距今最近的。高手帮忙,在线等!
表1,降水表:
日期,县名,24小时降水,48小时降水,72小时降水
表2,温度表
日期,县名,24小时温度,48小时温度,72小时温度如果把两个表边成一个表,结构如下:
日期,县名,24小时降水,48小时降水,72小时降水,24小时温度,48小时温度,72小时温度两个表中的日期有可能不一致,有可能一个是今天的,一个有可能只更新到前几天,筛选出公共的距今最近的。高手帮忙,在线等!
from
(
select * from 表1 union all select * from 表2
) t
order by 日期 desc
select a.* ,b.24小时温度,b.48小时温度,b.72小时温度 from 降水表 a left join 温度表 b
on a.日期=b.日期 and a.县名=b.县名
union all
..
筛选出距离降水表日期最近的温度表日期
select * from
降水表 A JOIN 温度表 B on A.县名 = B.县名
where b.日期 = (select top 1 日期 from 温度表 order by datediff(dd,a.日期,日期))
(
select m.* , n.24小时温度,n.48小时温度,n.72小时温度 from 表1 m , 表2 n where m.日期 = n.日期 and m.县名 = n.县名
) t1 where 日期 = (
select max(日期) from
(
select m.* , n.24小时温度,n.48小时温度,n.72小时温度 from 表1 m , 表2 n where m.日期 = n.日期 and m.县名 = n.县名
) t2 where t2.县名 = t1.县名
)
select t1.* from
(
select m.* , n.24小时温度,n.48小时温度,n.72小时温度 from 表1 m , 表2 n where m.日期 = n.日期 and m.县名 = n.县名
) t1 where 日期 = (
select max(日期) from
(
select m.* , n.24小时温度,n.48小时温度,n.72小时温度 from 表1 m , 表2 n where m.日期 = n.日期 and m.县名 = n.县名
) t2 where t2.县名 = t1.县名
)--不考虑分县取最近的。
select top 1 m.* , n.24小时温度,n.48小时温度,n.72小时温度 from 表1 m , 表2 n where m.日期 = n.日期 and m.县名 = n.县名 order by 日期 desc
在做一个天气预报网站,里边的列挺多的,就是两个表数据结构完全一致,只是一个是降水,一个是温度,我要把数据按日期和县显示近10天的降水和温度情况。数据量比较庞大,我写了几个sql,不过执行了5分钟不见出来,才来这里求助的,楼上的方法,我再试试
from
(
select
a.日期,a.县名,a.24小时降水,a.48小时降水,a.72小时降水,b.24小时温度,b.48小时温度,b.72小时温度
from 表1 a,表2 b
where datediff(day,a.日期,b.日期)=0
) t
order by 日期 desc
SELECT dbo.view_TownReport_Rain.filedate,
dbo.view_TownReport_Rain.rp_countyname,
dbo.view_TownReport_Rain.rp_townname,
dbo.view_TownReport_Rain.rp_12hour AS Rain12,
dbo.view_TownReport_Rain.rp_24hour AS Rain24,
dbo.view_TownReport_Rain.rp_36hour AS Rain36,
dbo.view_TownReport_Rain.rp_48hour AS Rain48,
dbo.view_TownReport_Rain.rp_60hour AS Rain60,
dbo.view_TownReport_Rain.rp_72hour AS Rain72,
dbo.view_TownReport_Temp.rp_12hour AS Temp12,
dbo.view_TownReport_Temp.rp_24hour AS Temp24,
dbo.view_TownReport_Temp.rp_36hour AS Temp36,
dbo.view_TownReport_Temp.rp_48hour AS Temp48,
dbo.view_TownReport_Temp.rp_60hour AS Temp60,
dbo.view_TownReport_Temp.rp_72hour AS Temp72
FROM dbo.view_TownReport_Rain INNER JOIN
dbo.view_TownReport_Temp ON
dbo.view_TownReport_Rain.filedate = dbo.view_TownReport_Temp.filedate AND
dbo.view_TownReport_Rain.rp_countyname = dbo.view_TownReport_Temp.rp_countyname
AND
dbo.view_TownReport_Rain.rp_townname = dbo.view_TownReport_Temp.rp_townname
ORDER BY dbo.view_TownReport_Rain.filedate DESC