数据库查询排序取第一个或空的问题

vip__888 2018-10-26 09:39:41
有两张表
A表结构

Id(主键),ID1,ID2 字段

B表结构

Id(A表主键),time1,ID3字段

现在是要查询A表所有数据 和 B表的 ID3,B表为A表的外键表,有多条或没有记录,要求按照time1 倒叙取最新的一条ID3,没有就置空。


sqlserver的 子查询在这里用不了order by,不熟悉 oracle,求语句支援。
...全文
328 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_50842294 2020-09-18
  • 打赏
  • 举报
回复
大佬 带带弟弟
vip__888 2018-10-26
  • 打赏
  • 举报
回复
谢谢大家的回复,搞定了
碧水幽幽泉 2018-10-26
  • 打赏
  • 举报
回复
select a.id,a.id1,a.id2,b.id3,b.id4 from a left join (select id,id3,id4,row_number()over(partition by id order by time1 desc) as rn from b) b on b.id = a.id and b.rn = 1
vip__888 2018-10-26
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:


SQL> 
SQL> create table A(id int primary key, name varchar(10));
Table created
SQL> create table B(id int, time1 date, id3 int);
Table created
SQL> alter table B add constraint fk_a_b foreign key (id3) references a(id);
Table altered
SQL> begin
  2      insert into A values(100, 'xxx');
  3      insert into A values(200, 'yyy');
  4      insert into A values(300, 'zzz');
  5      insert into B values(1,sysdate() - 1, 100);
  6      insert into B values(2,sysdate() - 0, 100);
  7      insert into B values(3,sysdate() + 1, 100);
  8      insert into B values(4,sysdate() - 1, 200);
  9      insert into B values(5,sysdate() - 0, 200);
 10  end;
 11  /
PL/SQL procedure successfully completed
SQL> col id format 99999;
SQL> col id3 format 99999;
SQL> col name format 10;
SQL> with bx as(
  2    select B.id,
  3           B.time1,
  4           B.id3,
  5           row_number() over(partition by id3 order by time1 desc) rn
  6      from B
  7  )
  8  select A.id, A.name, bx.id, bx.time1, bx.id3
  9    from A
 10    left join BX on A.id = BX.id3 and BX.rn = 1;
   ID NAME          ID TIME1         ID3
----- ---------- ----- ----------- -----
  100 xxx            3 2018/10/27    100
  200 yyy            5 2018/10/26    200
  300 zzz                          
SQL> drop table B purge;
Table dropped
SQL> drop table A purge;
Table dropped

SQL> 

我在B表还有ID4字段 这个怎么写呢? 取ID3的时候要取ID4在一条记录里面
vip__888 2018-10-26
  • 打赏
  • 举报
回复
引用 3 楼 qq646748739 的回复:
select a.id,a.id1,a.id2,b.id3 from a left join (select id,id3,row_number()over(partition by id order by time1 desc) as rn from b) b on b.id = a.id and b.rn = 1
我在B表还有ID4字段 这个怎么写呢?
碧水幽幽泉 2018-10-26
  • 打赏
  • 举报
回复
select a.id,a.id1,a.id2,b.id3 from a left join (select id,id3,row_number()over(partition by id order by time1 desc) as rn from b) b on b.id = a.id and b.rn = 1
卖水果的net 2018-10-26
  • 打赏
  • 举报
回复


SQL> 
SQL> create table A(id int primary key, name varchar(10));
Table created
SQL> create table B(id int, time1 date, id3 int);
Table created
SQL> alter table B add constraint fk_a_b foreign key (id3) references a(id);
Table altered
SQL> begin
  2      insert into A values(100, 'xxx');
  3      insert into A values(200, 'yyy');
  4      insert into A values(300, 'zzz');
  5      insert into B values(1,sysdate() - 1, 100);
  6      insert into B values(2,sysdate() - 0, 100);
  7      insert into B values(3,sysdate() + 1, 100);
  8      insert into B values(4,sysdate() - 1, 200);
  9      insert into B values(5,sysdate() - 0, 200);
 10  end;
 11  /
PL/SQL procedure successfully completed
SQL> col id format 99999;
SQL> col id3 format 99999;
SQL> col name format 10;
SQL> with bx as(
  2    select B.id,
  3           B.time1,
  4           B.id3,
  5           row_number() over(partition by id3 order by time1 desc) rn
  6      from B
  7  )
  8  select A.id, A.name, bx.id, bx.time1, bx.id3
  9    from A
 10    left join BX on A.id = BX.id3 and BX.rn = 1;
   ID NAME          ID TIME1         ID3
----- ---------- ----- ----------- -----
  100 xxx            3 2018/10/27    100
  200 yyy            5 2018/10/26    200
  300 zzz                          
SQL> drop table B purge;
Table dropped
SQL> drop table A purge;
Table dropped

SQL> 

vip__888 2018-10-26
  • 打赏
  • 举报
回复
顶一下
内容概要:本文提出了一种针对数据中心微网的两阶段鲁棒规划方法,重点考虑了系统运行中的灵活性需求以及供需两端的不确定性。通过构建包含可再生能源出力、负荷波动等不确定因素的数学模型,采用两阶段鲁棒优化算法实现对储能系统、分布式电源等关键设备的容量优化配置。第一阶段完成设备的规划决策,第二阶段通过调节手段应对最恶劣场景下的运行不确定性,从而提升微网在复杂环境下的适应能力与运行经济性。该方法有效增强了系统应对波动的能力,并通过Matlab代码实现了完整的算法复现,具有较强的工程应用与科研参考价值。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础,从事能源互联网、微网规划、鲁棒优化等相关领域研究的研发人员或高校研究生。; 使用场景及目标:① 掌握两阶段鲁棒优化在微网规划中的建模思路与求解流程;② 学习如何处理新能源与负荷不确定性对系统规划的影响;③ 复现并改进高水平期刊(EI级别)的优化模型,支撑科研论文撰写与项目开发。; 阅读建议:建议结合Matlab代码深入理解模型的约束条件与目标函数设置,重点关注不确定性集合的构建、列与约束生成(C&CG)算法的实现细节,并尝试替换不同场景参数以验证模型鲁棒性。

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧