sql问题

查询数据时,如果没有最新数据就默认沿用有数据的那天。sql如何写。

之前的查询是沿用昨天数据,nvl(s.zhichu,nvl(r.zhichu,yxts.zhichu))zhichu

yxts取的是昨日数据~~~~下面是举个例子

比如,今天2023年3月2日,班级成绩各科查询,共20个班,数据取自同一个表,语文、英语按当天查询填报;数学当天没有数据就默认沿用有数据的那天。1班2023年2月28日数学有数据,之后每天就沿用,2班2023年2月3日数学有数据就沿用,都显示在2023年3月2日的填报查询中,如果2班2023年2月12日数学有数据就沿用这天的

SQL 用户G2632943 发布于 2023-3-2 15:23
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
JL98Lv6中级互助
发布于2023-3-2 15:57(编辑于 2023-3-2 16:03)

日历表

image.png

分数表

image.png

语句:

SELECT

T1.*,

T2.*,

T3.*,

SELECT  FS FROM 

(SELECT

TO_CHAR( T4.RQ, 'yyyy-mm-dd' ) AS RL,

T4.NAME,

T4.FS,

row_number() over(partition by T4.NAME order by TO_CHAR( T4.RQ, 'yyyy-mm-dd' ) desc) RN

FROM

FS T4 

) T5 WHERE RN =1 AND T5.NAME = T2.NAME1

AND  T5.RL  <= T1.RL1

) AS  FS_ZZ

FROM

( SELECT TO_CHAR( RL, 'yyyy-mm-dd' ) AS RL1 FROM "RL" ) T1

LEFT JOIN ( SELECT DISTINCT NAME AS NAME1 FROM FS ) T2 ON 1 = 1

LEFT JOIN FS T3 ON T1.RL1 = TO_CHAR( T3.RQ, 'yyyy-mm-dd' ) 

AND T2.NAME1 = T3.NAME 

ORDER BY

T1.RL1

结果:image.png

image.png

多班级可以在这个位置加个班级关联条件

image.png

最佳回答
0
sgq3256Lv4见习互助
发布于2023-3-2 15:43

语文、英语正常查询,数学写个子查询查询出最大日期,把日期等于最大日期,然后两段UNION ALL就行了

  • 用户G2632943 用户G2632943(提问者) 这样不行,不能显示在同一天。如果你最大日期是2023年2月28日,但查出来一班有数据,二班就没数据了
    2023-03-02 15:51 
  • sgq3256 sgq3256 回复 用户G2632943(提问者) 那你根据不同的班查不同的最大日期呀,关联字段加个班级就行了呗
    2023-03-02 15:59 
  • 3关注人数
  • 306浏览人数
  • 最后回答于:2023-3-2 16:03
    请选择关闭问题的原因
    确定 取消
    返回顶部