首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL:在比较前一天的结果时排除周末

Oracle SQL:在比较前一天的结果时排除周末
EN

Stack Overflow用户
提问于 2021-04-05 10:10:37
回答 2查看 35关注 0票数 1

我正在尝试将今天的结果与前一个工作日的结果进行比较,例如:

代码语言:javascript
复制
select * from T1 where  ASOF = trunc(sysdate)

select * from T2 where ASOF = trunc(sysdate-1)

select  t1.asof,   t1.Count-t2.count as difference from T1,T2

但是如果有周末,我需要动态地将今天的结果与上一个工作日(星期五)进行比较,我可以将其写为ASOF = trunc(sysdate-3),但这将是硬编码,不会在上一个工作日工作。

EN

回答 2

Stack Overflow用户

发布于 2021-04-05 10:52:18

如果您有一个没有例外的好规则来标识工作日,那么可以使用Q1的CTE。

代码语言:javascript
复制
With QWD1 as (
-- select working days here ...
-- ... cdt = current working date col
),
QWD2 as (
-- select working days and prev working day for that day via LAG()...
select
-- ... cdt = current working date col
   cdt,
-- ... pdt = prev working date col
   lag(cdt, 1) over (order by cdt) as pdt
from QWD1
order by cdt
)
SELECT 
  t1.cdt as asof,
  t1.count-t2.count as Count_Difference
from QWD2 t1, QWD2 t2
where t2.cdt = t1.pdt
;

如果你没有一个好的规则来识别工作日……比如,“如果超过8个人带着糟糕的卫生习惯来到办公室,那么当天的工作就会被取消”……然后为QWD1使用一个表,并根据需要填充它。对新表使用上面的查询,而不是QWD1的CTE,查询的其余部分将包含QWD2、final select等。

HTH Shankar

票数 0
EN

Stack Overflow用户

发布于 2021-04-05 17:42:59

您可以使用依赖于当前星期几的CASE语句来解决此问题:

代码语言:javascript
复制
SELECT trunc(sysdate) - 
       CASE TO_CHAR(sysdate, 'fmDy', 'NLS_DATE_LANGUAGE = ENGLISH')
         WHEN 'Mon' THEN 3
         WHEN 'Tue' THEN 1
         WHEN 'Wed' THEN 1
         WHEN 'Thu' THEN 1
         WHEN 'Fri' THEN 1
         WHEN 'Sat' THEN 1
         WHEN 'Sun' THEN 2
         END
  FROM DUAL;

我将两个时间戳(午夜和最后一个工作日)都存储在两个变量中,以保持一致性和更好的可读性,但出于演示目的,您可以将其添加到查询中:

代码语言:javascript
复制
SELECT * FROM employee AS OF TIMESTAMP 
    trunc(sysdate) - 
    CASE TO_CHAR(sysdate, 'fmDy', 'NLS_DATE_LANGUAGE = ENGLISH')
         WHEN 'Mon' THEN 3
         WHEN 'Tue' THEN 1
         WHEN 'Wed' THEN 1
         WHEN 'Thu' THEN 1
         WHEN 'Fri' THEN 1
         WHEN 'Sat' THEN 1
         WHEN 'Sun' THEN 2
         END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66947519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档