时间维表DIMTIME,内有字段:
字段名                类型                        注释
TIMEID             NUMBER(8)                 主键  自动递增
YEAR               NUMBER(4)                日期年份,例如2008
MONTH              NUMBER(2)                日期月份,例如8
DAY                NUMBER(2)                日期每日,例如8
DIMTIMENAME        DATE                     具体日期,例如:2008-8-8经度表DIMLONGITUDE,内有字段:
字段名                类型                        注释
LON_ID             NUMBER(10)                主键  自动递增
DEGREE_SQAREA1D    NUMBER(3)                一个经度里的度数
MINUTE_SQAREA5M    NUMBER(2)                一个经度的分转化为5分的值,此分数是计算获得的,详细见下面计算公式例如109.102800度,则DEGREE_SQAREA1D的值为109,MINUTE_SQAREA5M的计算公式为:
先把小数点右面的度数转化为分数:0.102800*60 = 6.168分
转为为5分为:6.168/5  取整数为1    即MINUTE_SQAREA5M值为1纬度表DIMLATITUDE,内有字段:
字段名                类型                        注释
LAT_ID             NUMBER(10)                主键  自动递增
DEGREE_SQAREA1D    NUMBER(3)                一个纬度里的度数
MINUTE_SQAREA5M    NUMBER(2)                一个纬度的分转化为5分的值,此值计算公式同经度表里相同温度表Temp_01,内有字段:
字段名                类型                        注释
ID             NUMBER(18)                主键  自动递增
LON            NUMBER(10,6)              纬度值,例如24.078000度
LAT            NUMBER(10,6)              经度值,例如-37.083200度
VAL            NUMBER(18,6)              温度值
DT             DATE                      具体日期,例如2004-7-6所求的统计表Statistics,内有字段:
字段名            注释
ID              主键,自动递增
STAT_DT_ID      温度表Temp_01里DT的值转化到逐年逐月的值,例如2004-7-6\2004-7-7\2004-7-8的STAT_DT均等于2004-7
LOG_ID          经度表DIMLONGITUDE里的按5分递增的值
LAT_ID          纬度表DIMLONGITUDE里的按5分递增的值
MAX             温度表Temp_01表里VAL最大值
MIN             温度表Temp_01表里VAL最小值
COUNT           温度表Temp_01表里VAL的个数说明:
统计表Statistics是由STAT_DT_ID\LOG_ID\LAT_ID共同决定的,COUNT为符合STAT_DT_ID\LOG_ID\LAT_ID的个数
MAX  MIN  COUNT均是针对温度表Temp_01表里VAL统计出来的
现统计LOG_ID为80度按5分递加到85度,LAT_ID为35度按5分递加到40度,所有日期的值,格式如下:
ID     STAT_DT_ID      LOG_ID             LAT_ID       MAX        MIN           COUNT
1      2006.5          80                 37           11.447180  -3.280200     5
2      2006.5          80.5(80度5分)      37.5         20.516080  -1.806790     6
.
.
.
554    2006.6          80                 37           20.465100   -9.031500     7
555    2006.6          80.5(80度5分)      37.5         178.921900  19.860640     3    
.
.
.          
1500   大体思路如下:
1:Temp_01里DT值转化为Statistics里的STAT_DT_ID值
2:DIMLONGITUDE与DIMLONGITUDE里的DEGREE_SQAREA1D值与MINUTE_SQAREA5M值转化为Statistics里的LOG_ID与LAT_ID
3:根据STAT_DT_ID\LOG_ID\LAT_ID求出Temp_01表里VAL值的最大值,最小值和个数

解决方案 »

  1.   

    DIMTIME表没有必要吧,只有一个字段就可以了
      

  2.   

    看起来好晕!
    给个sql脚本或是结果要求,可能方便些。
      

  3.   


    在这里DIMTIME表没多大用处补充一点:
    Temp_01里DT值转化为Statistics里的STAT_DT_ID值,即为:是把DT值分别取出年和月,然后到DIMTIME表里查询YEAR和MONTH,
    然后由YEAR和MONTH组合而成的
    貌似绕了一个大圈子
      

  4.   

    你都知道怎么算5分值了。还要DIMLONGITUDE和DIMLATITUDE表作什么,直接对Temp_01统计就行了。
      

  5.   

    因为Temp_01有所有数据了。其他表都用不上。比如知道: Temp_01.LON = 24.078000 这里按照你的规则计算出5分递增值,这个时候这个字段就等于24度(如果24~24.5之间的值不需要,也行)。
      

  6.   

    CS中判断组织SQL语句数据库为ORACLE组织成的SQL语句格式如下select distinct (lon.minute_sqarea2m) as 纬度,
                    lat.minute_sqarea2m as 经度,
                    max(b.st_ave),
                    min(b.ST_MIN),
                    sum(b.ST_COUNT),
                    sum(b.st_ave * b.st_count) / (sum(b.st_count)),
                    trunc(STDDEV(t.FACTOR_VALUE), 6),
                    a.year || '-' || a.month
      from dimtime      a,
           f_6_8_2_1    b,
           dimlongitude lon,
           dimlatitude  lat,
           f_6_8_2_1_d  t
     where b.dimtime = a.date1
       and lon.minute_sqarea1m = b.dimlon
       and lat.minute_sqarea1m = b.dimlat
       and b.id = t.f_id
     group by a.year || '-' || a.month, lon.minute_sqarea2m, lat.minute_sqarea2m
     order by a.year || '-' || a.month, lon.minute_sqarea2m, lat.minute_sqarea2m
    结贴了