繁体   English   中英

从数据库获取给定月份和年份的所有日期的记录,如果数据库中不可用,则为空白

[英]get records from database of all days of given month and year and blank if not available in database

我正在尝试从员工出勤表中获取记录。 我想获取给定月份和年份的所有日期记录。 如果当天没有可用的记录,则它将仅显示日期,而其他字段将为空白。 下表如下:

Table: emp_attendance

id   emp_id   attendance_date    attendance   reason
1    1        2014-08-01         P
2    1        2014-08-02         A           seek
.
.
.
26   1        2014-08-26         P

在给定的表格中,假设没有某些特定日期的记录,例如2014-08-27、2014-08-28、2014-08-29、2014-08-30、2014-08-31。

因此,我如何获得2014年8月的记录,如下所示。

Expected Result Would Be:

date               id       emp_id    attendance   reason
2014-08-01         1        1         P
2014-08-02         2        1         A            seek
.
.
.
2014-08-26         26       1         P
2014-08-27         NULL     NULL      NULL         NULL
2014-08-28         NULL     NULL      NULL         NULL
2014-08-29         NULL     NULL      NULL         NULL
2014-08-30         NULL     NULL      NULL         NULL
2014-08-31         NULL     NULL      NULL         NULL

您需要创建一个表,其中包含当月的所有日期。 那你可以做

SELECT d.date, a.*
FROM dates AS d -- This is the table with all days
LEFT JOIN emp_attendance AS a ON d.date = a.attendance_date
ORDER BY d.date

演示

如果您的dates表仅包含日期而不是完整日期,则可以执行以下操作:

SELECT d.date, a.*
FROM dates AS d -- This is the table with all days
LEFT JOIN emp_attendance AS a ON d.date = DAY(a.attendance_date)
    AND YEAR(a.attendance_date) = 2014 AND MONTH(a.attendance_date) = 8
ORDER BY d.date

演示

试试下面的代码:

SELECT * FROM emp_attendance WHERE YEAR(attendance_date)='2014'and MONTH(attendance_date)='8'ORDER BY出席时间

如果您需要再添加一个条件,则还可以添加(AND出勤为空AND原因为空)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM