#mysql
#mysql
Вопрос:
Добрый день! Я пытался найти эту проблему по всему переполнению стека, но не могу найти нужное ключевое слово для поиска, думаю, лучше обратиться к вам, ребята, за помощью.
Я пытаюсь создать историю посещаемости, основанную на двух таблицах:
- таблица посещаемости
- таблица размеров календаря
в таблице посещаемости приведены данные, как показано ниже
| 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 |
30 ноября будет показано завтра.
есть ли другой способ сделать это возможным? Спасибо
Ответ №1:
Я предполагаю, что вы пытаетесь вычислить status
столбец, верно?
Что-то вроде IF(datestatus = 'Holiday', 'Holiday', IFNULL(punchin, 'Absent', 'Present')) AS status
«должно сработать», хотя и немного неэлегантно.
Вам нужно будет убедиться, что вы не выполняете внутреннее объединение, чтобы получить строку, в которой нет посещаемости для этого идентификатора, т. Е., calendar_dimension c LEFT JOIN attendance a ON ...
Комментарии:
1. Я попытался присоединиться слева с помощью c.date = a.date_created, но все равно получил тот же результат.
2. Примерьте c.дата = a.дата создания И.idnumber = ‘0001’
3. вау, это работает, спасибо
4. Рад, что это помогло!