RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1539296
Accepted
Acinit
Acinit
Asked:2023-09-06 13:35:55 +0000 UTC2023-09-06 13:35:55 +0000 UTC 2023-09-06 13:35:55 +0000 UTC

按日期和键对数据进行分组

  • 772

有一个检查站。检查点记录该通行证,并在下表中记录该通行证的记录

CREATE TABLE tabel_tabel (
    ID NUMBER,
    DATE_LOG DATE,
    DATE_LOG_TRUNC DATE,
    WORKER_ID NUMBER,
    ACCESS_STATUS NUMBER(1)
);

按照以下格式

INSERT ALL
  -- первый день, затуп считывания в начале дня
  INTO tabel_tabel (ID, DATE_LOG, DATE_LOG_TRUNC,WORKER_ID,ACCESS_STATUS) 
VALUES (1, TO_DATE('01.09.2023 7:49:55', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('01.09.2023', 'DD.MM.YYYY'), 123, 0)
  INTO tabel_tabel (ID, DATE_LOG, DATE_LOG_TRUNC,WORKER_ID,ACCESS_STATUS)
VALUES (2, TO_DATE('01.09.2023 7:50:00', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('01.09.2023', 'DD.MM.YYYY'), 123, 0)
  INTO tabel_tabel (ID, DATE_LOG, DATE_LOG_TRUNC,WORKER_ID,ACCESS_STATUS)
VALUES (3, TO_DATE('01.09.2023 17:01:00', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('01.09.2023', 'DD.MM.YYYY'),  123, 1)

  -- второй день, затуп считывания в конце дня
  INTO tabel_tabel (ID, DATE_LOG, DATE_LOG_TRUNC,WORKER_ID,ACCESS_STATUS)
VALUES (4, TO_DATE('02.09.2023 7:55:00', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('02.09.2023', 'DD.MM.YYYY'), 123, 0)
  INTO tabel_tabel (ID, DATE_LOG, DATE_LOG_TRUNC,WORKER_ID,ACCESS_STATUS)
VALUES (5, TO_DATE('02.09.2023 17:00:30', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('02.09.2023', 'DD.MM.YYYY'), 123, 1)
  INTO tabel_tabel (ID, DATE_LOG, DATE_LOG_TRUNC,WORKER_ID,ACCESS_STATUS)
VALUES (6, TO_DATE('02.09.2023 17:01:00', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('02.09.2023', 'DD.MM.YYYY'),  123, 1)
SELECT * FROM dual;

有时检查站的软件可能很愚蠢,会多次读取通行证。

在实际示例中,数据量要多得多,因此按WORKER_ID日期范围进行采样

select t.id,
 TO_CHAR(t.DATE_LOG, 'DD.MM.YYYY HH24:MI:SS') as date_log,
 t.date_log_trunc,
 t.worker_id,
 t.access_status
from tabel_tabel t
where t.date_log_trunc >= TO_DATE('01.09.2023', 'DD.MM.YYYY')
  AND t.date_log_trunc <= SYSDATE
  AND t.worker_id = 123

查询结果如下所示

ID  DATE_LOG             DATE_LOG_TRUNC  WORKER_ID  ACCESS_STATUS
1   01.09.2023 07:49:55  01-SEP-23       123        0
2   01.09.2023 07:50:00  01-SEP-23       123        0
3   01.09.2023 17:01:00  01-SEP-23       123        1
4   02.09.2023 07:55:00  02-SEP-23       123        0
5   02.09.2023 17:00:30  02-SEP-23       123        1
6   02.09.2023 17:01:00  02-SEP-23       123        1

有必要将其采用这样的格式:在日期上WORKER_ID形成两个字段ACCESS_STATUS(0 - 进入,1 - 退出),其中包含最小进入日期和最大退出日期的值,即

DATE_LOG_TRUNC  TIME_IN    TIME_OUT   WORKER_ID
01.09.2023      07:49:55   17:01:00   123
02.09.2023      07:55:00   17:01:00   123

如有必要,可使用 dbfiddle

sql
  • 1 1 个回答
  • 17 Views

1 个回答

  • Voted
  1. Best Answer
    SwaD
    2023-09-06T14:52:08Z2023-09-06T14:52:08Z

    这是根据指定条件对数据进行分组的方法:

    select 
      t.worker_id,
      t.date_log_trunc,
      to_char(min(case when ACCESS_STATUS = 0 then date_log end), 'DD.MM.YYYY HH24:MI:SS') inCome,
      to_char(max(case when ACCESS_STATUS = 1 then date_log end), 'DD.MM.YYYY HH24:MI:SS') outCome
      from tabel_tabel t
    group by t.worker_id,
    date_log_trunc
    order by date_log_trunc
    

    显示员工每天的最短入职日期和最长离职日期

    • 0

相关问题

  • 通过 OUT 参数从过程结果输出

  • ON 关键字附近的语法错误 - SQL

  • 多表查询中的 Count() 聚合函数

  • 根据时间更改单元格中的日期

  • phpMyAdmin 中的错误 #1064 SQL 查询

  • Qt:包含变量的数据库查询

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5