如何按特定日期和另一个SQL标识符对数据进行分区
在这个场景中,我试图找到这些人没有上班的失踪天数。。。它适合一个人使用。我正确地找回了他们失去的日子。但是当我加上两个人。。我没有为他们找回正确的错过的日子,因为我想我只是在那个日期加入 我想知道如何通过人员id和日期对这些数据进行分区,以便能够获得每个数据缺失的准确天数 请提供帮助,谢谢。您通常会将日期列表与人员列表交叉连接,然后使用“不存在”提取缺少的人员/日期元组:如何按特定日期和另一个SQL标识符对数据进行分区,sql,oracle,plsql,oracle11g,oracle-sqldeveloper,Sql,Oracle,Plsql,Oracle11g,Oracle Sqldeveloper,在这个场景中,我试图找到这些人没有上班的失踪天数。。。它适合一个人使用。我正确地找回了他们失去的日子。但是当我加上两个人。。我没有为他们找回正确的错过的日子,因为我想我只是在那个日期加入 我想知道如何通过人员id和日期对这些数据进行分区,以便能够获得每个数据缺失的准确天数 请提供帮助,谢谢。您通常会将日期列表与人员列表交叉连接,然后使用“不存在”提取缺少的人员/日期元组: with cte as ( select to_date('01-JUN-2020','DD-MON-YYYY')+
with cte as
(
select to_date('01-JUN-2020','DD-MON-YYYY')+(level-1) DT
from dual
connect bY level<= 30
)
select *
from cte x
left outer join
(select date from time where emp in (1, 2)) a on x.dt = a.date
如果还希望查看状态日期,请使用左联接,而不是原始查询中的“不存在”:
with cte as (
select date '2020-06-01' + level - 1 dt
from dual
connect by level <= 30
)
select c.dt, e.emp
from cte c
cross join (select 1 emp from dual union all select 2 from dual) e
where not exists (
select 1
from times t
where t.emp = e.emp and t.dt = e.date
)
请不要介意可怕的表名lol。。只是为了演示目的,哪个列存储个人?emp存储个人,个人id我试试。。。。这不会让你回忆起他们在场的日子,是吗?@JayKhan:我以为你只想要缺少的日期/人元组。否则,您可以使用左连接-查看我的更新答案。谢谢!看起来很完美。将测试。。对不起,我没有把结果集。。。我将来会这样做的。
with cte as (
select date '2020-06-01' + level - 1 dt
from dual
connect by level <= 30
)
select c.dt, e.emp
from cte c
cross join (select 1 emp from dual union all select 2 from dual) e
where not exists (
select 1
from times t
where t.emp = e.emp and t.dt = e.date
)
with cte as (
select date '2020-06-01' + level - 1 dt
from dual
connect by level <= 30
)
select c.dt, e.emp, -- enumerate the relevant columns from "t" here
from cte c
cross join (select 1 emp from dual union all select 2 from dual) e
left join times t on t.emp = e.emp and t.dt = e.date