【问题标题】:Calculate Entry exit times in attendence system在考勤系统中计算出入时间
【发布时间】:2018-12-20 05:47:58
【问题描述】:

我正在尝试格式化考勤系统中的进入和退出时间。我已经能够将数据格式化为以下表格。

+----------+--------------+-----------+------------------+------+
| Emp_Name | IO_Date_Only | IO_Status |     IO_Time      | Flag |
+----------+--------------+-----------+------------------+------+
| AA       | 08-01-2018   | Enter     | 08-01-2018 11:44 | N    |
| AA       | 08-01-2018   | Exit      | 08-01-2018 11:51 | N    |
| AA       | 08-01-2018   | Exit      | 08-01-2018 11:52 | Y    |
| AA       | 08-02-2018   | Exit      | 08-02-2018 11:44 | N    |
| AA       | 08-02-2018   | Exit      | 08-02-2018 11:51 | Y    |
| AA       | 08-02-2018   | Exit      | 08-02-2018 11:52 | Y    |
| BB       | 08-01-2018   | Exit      | 08-01-2018 11:44 | N    |
| BB       | 08-01-2018   | Exit      | 08-01-2018 11:51 | Y    |
| BB       | 08-01-2018   | Enter     | 08-01-2018 11:52 | N    |
| BB       | 08-02-2018   | Enter     | 08-02-2018 11:44 | N    |
| BB       | 08-02-2018   | Enter     | 08-02-2018 11:51 | Y    |
| BB       | 08-02-2018   | Exit      | 08-02-2018 11:52 | N    |
| BB       | 08-02-2018   | Enter     | 08-02-2018 11:55 | N    |
| BB       | 08-02-2018   | Exit      | 08-02-2018 11:57 | N    |
+----------+--------------+-----------+------------------+------+

如果我取第一行和第二行,你会看到第一行是入口,第二行是出口。然而第三排也是一个出口。当最终试图提取这些数据时,我想忽略第二行,但取第三行。

基本上我想要做的是如果有两个连续的条目,那么我需要拉第一行,如果有连续的出口,那么我需要拉那个组的最后一个出口行我已经将源格式化为上面使用 Talend 输出,但现在我有点卡住了。

输出应该如下所示

+----------+--------------+-----------+------------------+------+
| Emp_Name | IO_Date_Only | IO_Status |     IO_Time      | Flag |
+----------+--------------+-----------+------------------+------+
| AA       | 08-01-2018   | Enter     | 08-01-2018 11:44 | N    |
| AA       | 08-01-2018   | Exit      | 08-01-2018 11:52 | Y    |
| BB       | 08-01-2018   | Enter     | 08-01-2018 11:52 | N    |
| BB       | 08-02-2018   | Enter     | 08-02-2018 11:44 | N    |
| BB       | 08-02-2018   | Exit      | 08-02-2018 11:52 | N    |
| BB       | 08-02-2018   | Enter     | 08-02-2018 11:55 | N    |
| BB       | 08-02-2018   | Exit      | 08-02-2018 11:57 | N    |
+----------+--------------+-----------+------------------+------+

【问题讨论】:

  • 再次拍摄数据未格式化为正确格式。有人可以指导我阅读如何发布问题的手册,或者更确切地说如何格式化数据以进行发布。我将此用作参考,但它似乎不起作用ozh.github.io/ascii-tables
  • 选择文本并按control-k或在每行前添加4个空格
  • 标志是干什么用的?因为您说选择最后一个,但是同一员工连续有 5 个退出。如果您添加更多逻辑细节并向我们展示您想要的输出,将会有很大帮助
  • 你提到的五个出口有两个不同的日期。基本上我在 Name、Date_Only 和 IO_Status 上创建组。如果有多个连续条目,则第一个标记为 N,其余标记为 Y。Y 表示它是重复的。所以一个员工连续两次退出而没有进入
  • 另外我需要添加一个条件,如果一天的第一条记录是 Exit,那么我需要忽略该记录,如果当天的最后一条记录是 Entry,那么我还需要忽略该记录

标签: sql talend


【解决方案1】:

试试

select emp_name, IO_Status, IO_Date_Only, min(IO_Time) as IN, max(IO_Time) as OUT
from table
group by emp_name, IO_Status, IO_Date_Only;

【讨论】:

  • 这不会导致只获得两个我不想要的日期的记录。我想获取特定员工一天的所有记录,而不是连续重复两次退出或两次进入。
  • 您好,您可以从您提供的表格中提供您想要的示例输出吗?
  • 在问题中提供了示例输出
  • 有什么建议吗??
猜你喜欢
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多