2017-12-29 8 views
2

샘플 데이터는 쿼리에서/WANTED 결과 변수가HAVING 및 쿼리 BETWEEN


제시카 미상 이외의 모든 항목을 표시 할 필요가있는 것으로

INSERT INTO `employee` (id, first_name, last_name) VALUES 
('1', 'john', 'doe'), 
('2', 'joan', 'doe'), 
('3', 'jeff', 'doe'), 
('4', 'george', 'doe'), 
('5', 'jessica', 'doe'), 
('6', 'james', 'doe'), 
('7', 'justin', 'doe'), 
('8', 'jody', 'doe'); 

INSERT INTO `shift` (`started_at`, `ended_at`, `employee_id`) VALUES 
('2017-11-01 08:00:00', '2017-11-01 12:00:00', 1), 
('2017-11-01 12:00:00', '2017-11-01 16:00:00', 2), 
('2017-11-02 08:00:00', '2017-11-02 12:00:00', 3), 
('2017-12-25 12:00:00', '2017-12-25 16:00:00', 6), 
('2017-12-25 12:00:00', '2017-12-25 16:00:00', 3), 
('2017-12-28 19:00:00', '2017-12-28 23:00:00', 5), 
('2017-12-23 12:00:00', '2017-12-23 14:00:00', 5); 


빈 값을 반환 (그녀가 과거 2 주 r에있는 8 시간을 끊는 때 ule)

('2017-11-01 08:00:00', '2017-11-01 12:00:00', 1), 
('2017-11-01 12:00:00', '2017-11-01 16:00:00', 2), 
('2017-11-02 08:00:00', '2017-11-02 12:00:00', 3), 
('2017-12-25 12:00:00', '2017-12-25 16:00:00', 6), 
('2017-12-25 12:00:00', '2017-12-25 16:00:00', 3), 

감사합니다.

+0

SQL Fiddle은 훌륭하지만 질문을 편집하여 샘플 데이터와 원하는 결과를 편집해야합니다. 예를 들어, 첫 번째 문장에서 내 기대는 당신이 방아쇠를 찾고 있다는 것입니다. –

+0

안녕하세요, 고든, 그 요구 사항에 대한 자격이 있다고 생각해서 죄송합니다. 제 수정은 괜찮습니까? – entity

+0

은 현재 2 일 동안 8 시간 동안 집중적으로 조사하고 있습니다. 2 주 동안 8 시간 안된다 고요? 직원에게 ID를 제공 할 수 있습니까? – sia

답변

0

당신은 조건

SELECT e.first_name, e.last_name, SUM(ABS(TIMESTAMPDIFF(HOUR, s.started_at, 
s.ended_at))) as shift_hours 
FROM employee e, shift s 
WHERE e.id = s.employee_id and started_at BETWEEN (NOW() - INTERVAL 2 WEEK) AND NOW() 
GROUP BY e.id 
HAVING shift_hours < 8 

HAVING 절은 SQL에 추가 된 곳에서 WHERE 키워드가 집계 함수와 함께 사용할 수 없기 때문에 당신의 이주를 넣어해야합니다.

+0

감사합니다. Kiamoz,하지만 여전히 문제가 남아 있습니다. 지난 2 주 동안 8 시간 이상 근무하지 않은 모든 직원을 쿼리에서 선택하기를 바랍니다. 기본적으로 지난 2 주 동안 8 시간 이상의 작업을 완료하지 않은 데이터베이스의 모든 직원을 선택하면 현재 올바른 방법으로 진행 중입니까? – entity

+0

당신의 기대/문제 ('2018-01-01 08:00:00', '2018-01-01 12:00:00', 1)에 문제가 있으며, 2 주일 지나지 않아 미래가 @ 엔티티는 당신이 필요로하는 것을 알 수있게 해주십시오. – kiamoz

+0

죄송합니다. 제 실수입니다 - 지금 데이터를 수정했습니다. 쿼리는 실행되는 쿼리에서 지난 2 주 동안 8 shift_hours를 초과하는 모든 직원을 선택해야합니다. 데이터베이스는 쿼리가 실행 된 지난 24 시간 이내에 작업을 완료 한 직원을 선택해서는 안됩니다. 내 생각에 맞습니까? 잘하면 내가 설명하는 것이 의미가 있습니다. 미안하다면 알려주세요! – entity

0

나는 여기서 벗어날 수 있습니다. MySQL은 제가 전문이 아닙니다. 하지만 ... SQLfiddle에서 HAVING 절 (질문에서 언급 한 마지막 줄)을 제거하면 모든 레코드가 8 시간 이상을 표시합니다. 즉, HAVING 절이 올바르게 작동 중입니다. 그것은 8 시간 이상의 기록이 반환되는 것을 막고 있습니다. 이 경우, "HAVING shift_hours < 8"은 정확히 수행하고있는 작업을 수행합니다. 귀하의 집단에서 무언가가 당신이 생각하는/기대하고있는 것을하지 않는 것처럼 보입니다.

참고 : 논리적 비교 (< 8)를 줄 끝으로 이동하면 줄을 제거한 것과 같은 결과가 나타납니다.

+0

안녕하세요. C, 감사합니다. 네, 그 말이 맞습니다. 그리고 저는 그것이 어떻게 쓰여졌는지에 관해서는 올바르게 작동하고 있다고 믿습니다. 근본적으로 이것을 말하려고합니다. "지난 2 주 동안 8 시간 미만 근무한 모든 엔지니어를 선택하십시오." 지난 2 주 동안 어떤 일을하고 8 시간도 채 안된 사람 만 반환합니다. 나는이 일을 어떻게 성취 할 수 있는지 생각해보기 위해 고심하고있다. 다시 한번 고마워한다. – entity