orale 主子表,一对多,关联查询获取子表最新数据

orale 主子表,一对多,关联查询获取子表最新数据

主子表的最新数据

子表tableB 的 question_id 关联主表tableA 的 ID

SQL如下:

select A.ID,
       A.CODE
from tableA A
left join (select t.*,
           row_number() over(partition by t.question_id order by t.CREATED_TIME desc) rn
       from tableB t) B on B.question_id  = A.ID and B.rn = 1
同一个表的最新数据

table表的分组字段是nodeid,获取每组的最新数据

select t.*
from (select A.*,
             row_number() over(partition by A.nodeidorder by t.CREATED_TIME desc) rn
             from table A) t
where t.rn = 1

排序序号
row_number() over(partition by 分组列 order by 排序列 desc)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
假设我们有一个包含经纬度信息的数据集,可以使用Oracle数据库中的Sdo_Geometry类型来存储经纬度信息。假设我们已经将数据集存储到了一个名为mytable的中,其中经度和纬度信息存储在名为longitude和latitude的列中。 下面是使用k-means聚类算法对该数据集进行聚类的步骤: 1. 创建一个存储聚类结果的: ``` CREATE TABLE clusters ( cluster_id NUMBER, longitude NUMBER, latitude NUMBER ); ``` 2. 定义聚类的参数,如聚类的数量K、迭代次数等: ``` DECLARE k NUMBER := 5; max_iterations NUMBER := 10; threshold NUMBER := 0.01; BEGIN ... END; ``` 3. 随机选择K个中心点,并将其存储到一个临时中: ``` CREATE GLOBAL TEMPORARY TABLE temp_centers ( center_id NUMBER, longitude NUMBER, latitude NUMBER ) ON COMMIT PRESERVE ROWS; INSERT INTO temp_centers SELECT ROWNUM, longitude, latitude FROM mytable SAMPLE(5); ``` 4. 迭代计算每个数据点到最近的中心点,并将其划分到对应的簇中: ``` FOR i IN 1..max_iterations LOOP -- 计算每个数据点到每个中心点的距离 INSERT INTO clusters (cluster_id, longitude, latitude) SELECT t.center_id, m.longitude, m.latitude FROM mytable m, temp_centers t WHERE SDO_GEOM.SDO_DISTANCE( SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(m.longitude, m.latitude, NULL), NULL, NULL), SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(t.longitude, t.latitude, NULL), NULL, NULL), 0.005, 'unit=M') < threshold ORDER BY t.center_id, m.longitude, m.latitude; -- 更新每个簇的中心点 DELETE FROM temp_centers; INSERT INTO temp_centers (center_id, longitude, latitude) SELECT cluster_id, AVG(longitude), AVG(latitude) FROM clusters GROUP BY cluster_id; -- 如果中心点没有发生变化,则停止迭代 IF SQL%ROWCOUNT = 0 THEN EXIT; END IF; -- 清空聚类结果 DELETE FROM clusters; END LOOP; ``` 5. 查看聚类结果: ``` SELECT cluster_id, COUNT(*) AS num_points FROM clusters GROUP BY cluster_id; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值