每月每一天的SQL Server 2008出勤报告

斯拉帕坦

我有两个表,一个叫ATTENDANCE,另一个叫DATES。

ATTENDANCE我有这样的行:

Name | when       | Entry | Exit 
-----+------------+-------+------
Bob  | 2019-01-02 | 08:00 | 16:00
Bob  | 2019-01-04 | 09:00 | 17:00
Bob  | 2019-01-05 | 07:00 | 13:00

DATES桌子上

DATE
----------
2019-01-01
2019-01-02
2019-01-03
...

我需要的是这样的报告,当为一月选择Bob时:

date       | entry | exit
-----------+-------+-----
2019-01-01 | null  | null
2019-01-02 | 08:00 | 16:00
2019-01-03 | null  | null
2019-01-04 | 09:00 | 17:00
2019-01-05 | null  | null
2019-01-06 | 07:00 | 13:00
2019-01-05 | null  | null
...

我试过这样的左联接:

select date, entry, exit 
from DATES
left join ATTENDANCE on date = when 
where name = 'Bob' 
  and month(date) = (select month('2019-01-01'))

但是我只有这个:

 2019-01-02 | 08:00 | 16:00
 2019-01-04 | 09:00 | 17:00
 2019-01-05 | 07:00 | 13:00

可以请人帮我吗?

谢谢问候

戈登·利诺夫

你近了 您只需要将第二个表上的过滤移至以下on条件:

select d.date, a.entry, a.exit
from DATES d left join
     ATTENDANCE a
     on d.date = a.when and a.name = 'Bob' 
where MONTH(d.date) = MONTH('2019-01-01') and
      YEAR(d.date) = YEAR('2019-01-01')

笔记:

  • 使用表别名。推荐的别名是表名称的缩写。
  • 限定所有列名,以便您知道它们来自哪个表。
  • 不需要子查询即可从常量中提取月份。
  • 您应该包括年份和月份。

更好的写日期条件的方法是:

where d.date >= '2019-01-01' and
      d.date < '2019-01-01' + interval 1 month

这样比较好,因为优化器可以在索引可用的情况下使用on date

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取每月的最后一天(SQL Server 2008R2)

如何使用SQL Server创建每月出勤报告?

如何在Sql Server查询中获取每月最后一天的行

获得每月的每一天的价值

SQL Server 2008查询同一天的检查日期

SQL - 即使没有可用数据,如何返回每月的每一天

查询以在每月的每一天旁边显示结果

如何从计算值循环到每月的每一天

雄辩的:获取每月的每一天的数据

使用date()函数,如何获取每月的每一天?

SQL Server-前一天的数据检索

SQL Server:返回一天中最近时间的坐标

SQL Server 中上个月的最后一天

SQL Server-指定一天中的分组时间

一個嵌套的“for”循環,返回每月的每一天

将月份的总价值分配给每月的每一天

简化并加快每月的每一天查询数据库的过程

每个用户行的当前每月每一天的统计信息

除了星期五,我如何使用 Moment.js 获得每月的每一天?

我试图自动化一个SQL查询以在每月的每一天运行,而循环不起作用。查询给出错误1064

对于给定的日期范围,我需要一个动态的月份列表(包括第一天和最后一天),SQL Server

如何在 sql server 的 UNIX 时间戳中添加一天?

获取适用于Oracle和SQL Server的上个月的最后一天

SQL Server:每天我有多条记录,我只想返回第一天

SQL Server会获得带有后缀名称的表的名称,直到前一天

SQL Server代理作业历史记录-仅删除一天

仅从SQL Server中的表中的前一天恢复数据

使用SQL Server 2012生成一天中多个小时的日历表

基于SQL Server班次的工作日,周末,公共假日和一天中的时间