当前位置: 首页 > 知识库问答 >
问题:

将两个条目行(开始时间和结束时间)合并为Talend中的一行

湛钊
2023-03-14

我的数据来自MS SQL数据库,它与员工的工作时间有关。

问题是,开始时间和结束时间存储为两个不同的条目,因此当员工来时,他扫描他的徽章,这被视为到达时间,当他离开时,他再次扫描他的徽章,这被视为离开时间。有一列有助于区分开始时间和结束时间(CodeNr列:B1=开始时间,B2=结束时间)

这就是我的桌子的样子

现在我需要这个数据作为一个单一的条目,在Talend oder从数据库,

所以看起来应该是这样的

为了实现这一点,请使用什么(特别是在Talend中,以及何时比在MS SQL中更复杂)?

共有1个答案

卜瀚漠
2023-03-14
CREATE TABLE EmployeeWorkLoad(
EmployeeNr bigint,
Year int,
Month int,
Day int,
Hour int,
Minute int,
CodeNr char(2)
)


Insert into [EmployeeWorkLoad] ( [EmployeeNr],[Year],[Month] ,[Day],[Hour], [Minute] ,[CodeNr]) Values (1,2020,1,4,8,30,'B1'), 
(1,2020,1,4,16,45,'B2'), 
(1,2020,1,6,8,15,'B1'), 
(1,2020,1,6,16,45,'B2'),
(2,2020,3,2,8,10,'B1'), 
(2,2020,3,2,16,5,'B2')
  
  
GO

6行受影响

WITH CTE AS (
select EmployeeNr,Year,Month,Day,

MAX(CASE WHEN CodeNr='B1' THEN Hour  END) AS StartHour,
MAX(CASE WHEN CodeNr = 'B1' THEN Minute END) AS StartMinute,
MAX(CASE WHEN CodeNr = 'B2' THEN Hour END) AS EndHour,
MAX(CASE WHEN CodeNr = 'B2' THEN Minute END) AS EndMinute

from EmployeeWorkLoad
group by EmployeeNr,Year,Month,Day )

SELECT * , ABS(EndHour-StartHour) AS DutationHour
,ABS(IIF(EndMinute <StartMinute, EndMinute+60, EndMinute)- StartMinute) AS DurationMinute
FROM
CTE
GO
EmployeeNr | Year | Month | Day | StartHour | StartMinute | EndHour | EndMinute | DutationHour | DurationMinute
---------: | ---: | ----: | --: | --------: | ----------: | ------: | --------: | -----------: | -------------:
         1 | 2020 |     1 |   4 |         8 |          30 |      16 |        45 |            8 |             15
         1 | 2020 |     1 |   6 |         8 |          15 |      16 |        45 |            8 |             30
         2 | 2020 |     3 |   2 |         8 |          10 |      16 |         5 |            8 |             55

分贝

 类似资料:
  • 问题内容: 我在编写查询时遇到困难。我需要将时间连续状态的行合并为一个状态。例如,给定数据: 我只需要合并行,并得出状态的总体开始和结束时间。结果应为: 这是示例SQL: 提前致谢! 问题答案: 试试这个(> = SQL Server 2005):

  • 问题内容: 我似乎无法弄清楚这个查询。我需要将时间连续状态的行合并为一个状态。 这个问题与这里找到的问题类似,除了我使用的是Oracle 10而不是SQL Server: 当一个的结束时间是另一个的开始时间时合并行 示例数据: 我想得到以下输出: 这是示例SQL: 提前致谢! 问题答案: 也许这个吗?(我没有运行它的SQL机器)

  • 我有一个enum,其值如下:,,等。 我试图编写一个方法,它接受并返回该时间段的开始和结束日期。 我研究了新的Java8类,该类可能需要一个开始时间和结束时间,但似乎没有任何干净的方法可以在之后检索这些值。 如果不使用(似乎是错误的数据结构)或一些难看的日期时间算法,我如何能一次干净地返回开始日期和结束日期?

  • 我有这样的桌子 数据如下所示,开始时间和结束时间是连续的时间跨度: 因此,如果用户传递两个参数,则可以在任意时间段内选择* 它应该以如下方式返回表: 你看,棘手的部分是将原始的时间跨度削减到用户定义的时间跨度(@from-@To),我已经为此奋斗了一整天。请指教。 提前非常感谢你!!!

  • 我想从JavaGUI到数据库获取startTime和endTime的值。 电脑座位班 Cobadatabase类 这里的问题是,当单击登录按钮时,开始时间显示在我的数据库中的开始时间和结束时间列上。当单击注销按钮时,将在数据库中创建另一个行,该行在starTime和endTime列上都包含endTime。我想知道为什么会这样...