如何在 MySQL 中選擇具有出勤條件的完整月曆?

傑雷洛茲

再會!我試著在整個堆棧溢出中搜索這個問題,但我找不到正確的關鍵字來搜索,我想最好向你們尋求幫助。

我正在嘗試創建基於兩個表的出勤記錄:

  1. 考勤表
  2. calendar_dimension 表

考勤表有如下數據

|  idnumber   |   punchin   |   punhout   |  date_created  |
+-------------+-------------+-------------+----------------+
|   0002      |    7:30:00  |   16:00:00  |   2021-11-27   |
|   0003      |    7:30:00  |   16:00:00  |   2021-11-27   |
|   0004      |    7:30:00  |   16:00:00  |   2021-11-27   |


|   0002      |    7:30:00  |   16:00:00  |   2021-11-28   |
|   0003      |    7:30:00  |   16:00:00  |   2021-11-28   |
|   0004      |    7:30:00  |   16:00:00  |   2021-11-28   |

|   0001      |    7:30:00  |   16:00:00  |   2021-11-29   |
|   0002      |    7:30:00  |   16:00:00  |   2021-11-29   |
|   0003      |    7:30:00  |   16:00:00  |   2021-11-29   |
|   0004      |    7:30:00  |   16:00:00  |   2021-11-29   |

而 calendar_dimension 只是一個帶有日期的基本表格,如下所示:

請注意,這是一個完整的月曆:

|    date     |   datestatus  |
+-------------+---------------+
| 2021-11- 1  to  2021-11-25  |
| 2021-11-26  |   Holiday     |
| 2021-11-27  |               |
| 2021-11-28  |               |
| 2021-11-29  |               |
| 2021-11-30  |               |

到目前為止,我所做的是加入 calendar_dimension 和出勤表。

現在,我有這樣的事情:例如對於 00001,它正在我的一端工作:

|  idnumber   |   punchin   |   punhout   |  date_created  |
+-------------+-------------+-------------+----------------+
|   0001      |    7:30:00  |   16:00:00  |   2021-11-29   |

對於 0002:

|  idnumber   |   punchin   |   punhout   |  date_created  |   Status   |
+-------------+-------------+-------------+----------------+------------+
|   0001      |    7:30:00  |   16:00:00  |   2021-11-27   |  Present   |
|   0001      |    7:30:00  |   16:00:00  |   2021-11-28   |  Present   |
|   0001      |    7:30:00  |   16:00:00  |   2021-11-29   |  Present   |

我希望員工的歷史記錄表如下所示:

|  idnumber   |   punchin   |   punhout   |  date_created  |   Status   |
+-------------+-------------+-------------+----------------+------------+
|                      2021-11-1 to 2021-11-25                          |
|   0001      |    7:30:00  |   16:00:00  |   2021-11-26   |  Holiday   |
|   0001      |    7:30:00  |   16:00:00  |   2021-11-27   |  Absent    |
|   0001      |    7:30:00  |   16:00:00  |   2021-11-28   |  Absent    |
|   0001      |    7:30:00  |   16:00:00  |   2021-11-29   |  Present   |

11 月 30 日將在明天顯示。

有沒有其他方法可以使這成為可能?謝謝

卡戈夫

我假設您正在嘗試計算status列,對嗎?

類似的東西IF(datestatus = 'Holiday', 'Holiday', IFNULL(punchin, 'Absent', 'Present')) AS status應該可以工作,儘管它有點不優雅。

您必須確保您沒有進行內部聯接以獲得該 ID 沒有出席的行,即, calendar_dimension c LEFT JOIN attendance a ON ...

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章