Попытка понять, как создать запрос платежной ведомости, чтобы сжать входы и выходы часов - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь научить себя SQL. Я учусь плавать, прыгая в глубокий конец, как парень, и я думаю, что я тону. В настоящее время я мало что знаю о формировании команд SQL, кроме базовых команд Select, From, Where и Group By. Я собираюсь посмотреть некоторые классы удеми, чтобы помочь, но если у меня есть пример из реального мира, я могу помочь обосновать некоторые концепции для себя, я выучу намного лучше.

У меня есть некоторые данные в таблице, когда человек включается и выключается в течение дня. Я хочу сжать весь день до одного времени, одного времени и общего количества часов дня.

Так что я пока мало что знаю о том, как все части 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

Игнорирование периода перерыва в 0,5 часа и суммирование часов без перерыва.

Я думаю, что мне нужно сначала отсортировать их по датам и времени, затем получить первую запись часов в столбцах и получить последнюю запись для столбцов часов. Это примерно столько, сколько я могу сказать, поскольку я действительно не знаю, что я могу использовать или как использовать это для команд sql. Я надеюсь, что, получив решение этой проблемы, я попытаюсь поработать над ней, очень поможет мне понять, пока я прохожу курсы, чтобы я мог установить мозговую связь с чем-то материальным. Прямо сейчас я знаю, что это над моей головой, но, увидев и разобрав его и поняв части, я очень помогу.

1 Ответ

1 голос
/ 11 июля 2019

Вы, кажется, хотите базовый запрос агрегации:

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

Это довольно простой запрос, предлагающий изучить основы SQL, прежде чем углубляться в глубокий конец.

...