试图了解如何创建薪资查询以压缩时钟来回

时间:2019-07-11 18:39:39

标签: sql sql-server select group-by

我正在尝试自学SQL。通过跳入那种深end的家伙,我学会了游泳,而且我想淹死了。目前,除了基本的Select,From,Where和Group By之外,我几乎不了解有关形成SQL命令的知识。我将观看一些udemy课程来提供帮助,但是如果我有一个真实的例子,我可以为我提供一些基础知识,我将会学得更好。

我在一个表中有一些数据,用于指示某人一天的进出时间。我希望将整天压缩成一个时钟,一个时钟出去的时间以及一天的总小时数。

因此,我对所有sql部件如何一起形成查询并不十分了解,我还不了解它们的执行顺序。 到目前为止,我所能做的就是从表中选择列,然后按日期和时间对其进行排序。

例如,我有一个像这样的表:

select Empl_id, AdjClockInDate, AdjClockInTime, AdjClockOutDate, AdjClockOutTime, TotAdjTime From AttendDet Where EmplCode = '33' Order By EmplCode Asc, SearchDate desc, AdjClockInTime Asc

empl_id AdjClockInDate AdjClockInTime AdjClockOutDate AdjClockOutTime TotAdjTime 33 07/01/2019 07:00 07/01/2019 12:00 5 33 07/01/2019 12:00 07/01/2019 12:30 .5 33 07/01/2019 12:30 07/01/2019 17:50 5

我想摆脱的是将常见的日期和empl_id合并为一整天,如下所示:

empl_id AdjClockInDate AdjClockInTime AdjClockOutDate AdjClockOutTime TotAdjTime 33 07/01/2019 07:00 07/01/2019 17:50 10

忽略.5小时的休息时间并总结非休息时间。

我认为我需要先按日期和时间对它们进行排序,然后再获取列时钟的第一个条目,并获取列时钟的最后一个条目。 正如我不知道该如何使用或如何将其用于sql命令一样,这可以说的差不多。 我希望通过找到解决这个问题的方法,我可以尝试解决这个问题,这将极大地帮助我理解课程学习过程,从而使自己与实际事物建立大脑联系。 现在,我知道这很烦人,但是通过查看和分解并理解各个部分将极大地帮助我。

1 个答案:

答案 0 :(得分:1)

您似乎想要一个基本的聚合查询:

select Empl_id, AdjClockInDate, MIN(AdjClockInTime), AdjClockOutDate, 
       MAX(AdjClockOutTime), SUM(TotAdjTime)
from AttendDet
where Empl_id = '33'
group by Empl_id, AdjClockInDate, AdjClockOutDate;

这是一个非常基本的查询,建议您在深入探讨SQL的基础知识之前。