有两个表,结构是这样的:
表1,降水表:
日期,县名,24小时降水,48小时降水,72小时降水
表2,温度表
日期,县名,24小时温度,48小时温度,72小时温度如果把两个表边成一个表,结构如下:
日期,县名,24小时降水,48小时降水,72小时降水,24小时温度,48小时温度,72小时温度两个表中的日期有可能不一致,有可能一个是今天的,一个有可能只更新到前几天,筛选出公共的距今最近的。高手帮忙,在线等!

解决方案 »

  1.   

    select top 1 *
    from 
    (
    select * from 表1 union all select * from 表2
    ) t
    order by 日期 desc
      

  2.   


    select a.* ,b.24小时温度,b.48小时温度,b.72小时温度 from 降水表 a left join 温度表 b
    on a.日期=b.日期 and a.县名=b.县名 
    union all
    ..
      

  3.   

    select top 1 * from (select t1.*,t2.24小时温度,t2.48小时温度,t2.72小时温度 from t1 left join t2 on t1.date=t2.date and t1.县名=t2.县名) order by date desc
      

  4.   


    筛选出距离降水表日期最近的温度表日期
    select * from 
    降水表 A JOIN 温度表 B on A.县名 = B.县名
    where b.日期 = (select top 1 日期 from 温度表 order by datediff(dd,a.日期,日期))
      

  5.   

    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.县名
    )
      

  6.   

    --考虑分县取最近的。
    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
      

  7.   


    在做一个天气预报网站,里边的列挺多的,就是两个表数据结构完全一致,只是一个是降水,一个是温度,我要把数据按日期和县显示近10天的降水和温度情况。数据量比较庞大,我写了几个sql,不过执行了5分钟不见出来,才来这里求助的,楼上的方法,我再试试
      

  8.   

    貌似理解错了select top 1 *
    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
      

  9.   

    问题解决了,谢谢各位的热心,Sql视图如下:
    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