Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按特定日期和另一个SQL标识符对数据进行分区_Sql_Oracle_Plsql_Oracle11g_Oracle Sqldeveloper - Fatal编程技术网

如何按特定日期和另一个SQL标识符对数据进行分区

如何按特定日期和另一个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')+

在这个场景中,我试图找到这些人没有上班的失踪天数。。。它适合一个人使用。我正确地找回了他们失去的日子。但是当我加上两个人。。我没有为他们找回正确的错过的日子,因为我想我只是在那个日期加入

我想知道如何通过人员id和日期对这些数据进行分区,以便能够获得每个数据缺失的准确天数

请提供帮助,谢谢。

您通常会将日期列表与人员列表交叉连接,然后使用“不存在”提取缺少的人员/日期元组:

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