oracle查询日期段内每天的数据 5C

图片说明
求解,我现在查出了测站测验要素id的集合,日期的集合,现在需要从这张表得到每个测站测验要素在日期集合里每天的数据,测站测验要素id从别的表查出来,可能这张表都没有这个id记录,但也要以日期段每天为0查出来
========补充=======
举个例子
例如一张用户表吧
id 名称 分数 考试日期 四列
要查id为1,2,3的三个人在1日,2日,3日的成绩
而这张表里现在没有id为2的这名学生的记录
并且id为3的学生没有在2日的分数记录
但是最后的结果格式依旧要是
1 1日 分数
1 2日 分数
1 3日 分数
2 1日 分数
2 2日 分数
2 3日 分数
3 1日 分数
3 2日 分数
3 3日 分数
==========再补充=======
首先谢谢各位的主意,但是当我看到主要以between和大于小于来取数据的时候,似乎就不对了,因为id集合是从字典表拿的,但是数据表里可能都没这个id的记录,between一下直接就把这id给筛掉了

6个回答

order by SSDEC_DATE日期分组 id那个问题设定个NVL(num ,0) num为你统计的字段,如果这个字段为空变为0

qq_28583499
qq_28583499 回复qq_39301283: 日期能不能设定个范围,然后日期每次加一天,当查询条件,这样没有那天的话就设置默认为0,有的话在分组集成查询
2 年多之前 回复
qq_39301283
SmiLe樂 我之前没说清楚,刚更新补充了,这张表数据是不全的,不止某天可能没数据,甚至都没这个id的记录,但是依旧要以0查出来
2 年多之前 回复

应该是这样,改变一下最后的where条件就能查询出数据。

  select * from (
  select a.测验要素id,nvl(b.counts) as counts
    from 测验要素id表 a
    left outer join (select 测验要素id, count(*) as counts
                       from pub_log
                      where SSDEC_DATE >=
                            to_date('2018-01-01 0:0:0',
                                    'yyyy-MM-dd HH24:mi:ss')
                        and SSDEC_DATE <
                            to_date('2018-04-01 0:0:0'',
                                    'yyyy-MM-dd HH24:mi:ss')
                      group by 测验要素id) b
      on a.测验要素id = b.测验要素id
  )a where a.counts=0
qq_39301283
SmiLe樂 我之前没说清楚,刚更新补充了,这张表数据是不全的,不止某天可能没数据,甚至都没这个id的记录,但是依旧要以0查出来
2 年多之前 回复

这个不知道对不对了,没有实际数据验证过,你可以试试看,用编号和日期天来先做分组,然后左关联一下,
SELECT
*
FROM
(
'其他表测站编号来源数据'
) T1
LEFT JOIN (
SELECT
MIN (T1.SSDEC_ID) SSDEC_ID,
CHAR (T2.SSDEC_DATE, 'YYYY-MM-DD') AS SSDEC_DATE,
SUM (T1.SSDEC_REALCOUN) AS SSDEC_REALCOUN
FROM
'数据表'
GROUP BY
T1.SSDEC_ID,
TO_CHAR (SSDEC_DATE, 'YYYY-MM-DD')
) T2 ON T1.SSDEC_ID = T2.SSDEC_ID
AND T1.SSDEC_DATE = T2.SSDEC_DATE

select * from (
select a.测验要素id,a.days,nvl(b.counts) as counts
from 测验要素id表 a
left outer join (select 测验要素id,to_char( SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss') as days, count(*) as counts
from pub_log
where SSDEC_DATE >=
to_date('2018-01-01 0:0:0',
'yyyy-MM-dd HH24:mi:ss')
and SSDEC_DATE <
to_date('2018-04-01 0:0:0'',
'yyyy-MM-dd HH24:mi:ss')
group by 测验要素id,to_char( SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss')) b
on a.测验要素id = b.测验要素id
)a where a.counts=0

应该是这样的。。

  select a.*,nvl(b.counts,0) as counts from (
    select a.测验要素id,b.days from 测验要素id表 a,(
      select to_char(SSDEC_DATE, 'yyyy-MM-dd HH24:mi:ss') as days
      from pub_log
      where SSDEC_DATE >= to_date('2018-01-01 0:0:0', 'yyyy-MM-dd HH24:mi:ss')
      and SSDEC_DATE < to_date('2018-04-01 0:0:0'', 'yyyy-MM-dd HH24:mi:ss')
      group by to_char(SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss')
      ) b
  ) a
  left outer join (
      select 测验要素id,to_char(SSDEC_DATE, 'yyyy-MM-dd HH24:mi:ss') as days,count(*) as counts
      from pub_log
      where SSDEC_DATE >= to_date('2018-01-01 0:0:0', 'yyyy-MM-dd HH24:mi:ss')
      and SSDEC_DATE < to_date('2018-04-01 0:0:0'', 'yyyy-MM-dd HH24:mi:ss')
      group by 测验要素id,to_char(SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss')
  ) b on a.测验要素id=b.测验要素id and a.days=b.days
cxfidc01
红帽01 日期改成这样。to_char(SSDEC_DATE, 'yyyy-MM-dd')
2 年多之前 回复

应该可以用笛卡尔积关联表来查询,你可以试一下

把你查询出来的测验要素id和日期 用 cross join 连接 查询

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐