Oracle:寻找类似generate_series的东西

58wvjzkj  于 7个月前  发布在  Oracle
关注(0)|答案(1)|浏览(82)

我想创建一个视图,以某种方式,显示谁没有采取他们的笔记本电脑在过去2周,所以我们可以把它们分配给其他学生。我得到了这个表“移动笔记本电脑”,它显示了某人何时拿走或归还笔记本电脑(typemouvement等于'entree'或'sortie')和表'etudiantLaptops',该表显示谁的学生得到了哪台笔记本电脑(我会添加一些类似列的东西,说如果学生实际上有笔记本电脑或没有).我与甲骨文工作.如果它是postgresql我可以只使用生成系列检查日期,但我怎么能用甲骨文做呢?我想
1.请求显示在过去X周内没有移动笔记本电脑的用户
1.请求显示谁没有将笔记本电脑从日期X移动到日期X

CREATE TABLE etudiantLaptops
(
    id varchar(100) constraint entite_etulaptop_pk primary key,
    Etudiant  VARCHAR2(20) UNIQUE references ETUDIANT (ID),
    Promotion VARCHAR2(50) references promotion (id),
    reference VARCHAR2(10),
    laptops varchar2(50) references laptops(id),
    chargeur  varchar2(50) references chargeur (id),
    Remarque  VARCHAR2(200)
);

create table mouvementlaptops(
                                 id varchar(50) constraint entite_mvt_laptop_pk primary key,
                                 etudiantlaptop varchar2(50) references etudiantLaptops(id),
                                 daty date,
                                 heure varchar2(10),
                                 typemouvement varchar2(10)
);

字符串
我确实试过

WITH RecursiveDates (generated_date, end_date) AS (
    SELECT TO_DATE('2023-01-01', 'YYYY-MM-DD'), TO_DATE('2023-01-10', 'YYYY-MM-DD') FROM DUAL
    UNION ALL
    SELECT generated_date + 1, end_date
    FROM RecursiveDates
    WHERE generated_date < end_date
)
SELECT generated_date FROM RecursiveDates;


但我认为有一个更简单的方法来做到这一点,但我不知道如何?

fhity93d

fhity93d1#

目前还不清楚您的期望是什么,以及为什么您认为需要生成一个日期列表。
你可以只在移动表中没有条目时使用NOT EXISTS查找学生:

SELECT Etudiant
FROM   etudiantLaptops e
WHERE  NOT EXIST(
         SELECT 1
         FROM   mouvementlaptops m
         WHERE  daty >= TRUNC(SYSDATE) - INTERVAL '7' DAY * :num_weeks
         AND    e.id = m.etudiantlaptop
       )

字符串
或者:

SELECT Etudiant
FROM   etudiantLaptops e
WHERE  NOT EXIST(
         SELECT 1
         FROM   mouvementlaptops m
         WHERE  daty BETWEEN :start_date AND :end_date
         AND    e.id = m.etudiantlaptop
       )

相关问题