>

직원이 취한 걸음 수에 대한 데이터를 데이터베이스에서 검색하고 싶습니다.

테이블이 있습니다 : production_control

CREATE TABLE `production_control` (
  `id` int(10) UNSIGNED NOT NULL,
  `internal` char(100) NOT NULL,
  `employee` varchar(10) NOT NULL,
  `step` char(100) NOT NULL,
  `date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

샘플 데이터 :

INSERT INTO `production_control` (`id`, `internal`, `employee`, `step`, `date`) VALUES
(1, '546892986', 'E.DF', 'step1', '2017-09-27 14:14:11'),
(2, '177433986', 'E.EN', 'Montażysta', '2017-09-28 08:51:50'),
(3, '953892986', 'E.DF', 'step2', '2017-09-28 09:10:22'),
(4, '170005359', 'E.DF', 'step2', '2017-09-28 08:33:10'),
(5, '135099059', 'E.DF', 'step1', '2017-09-29 14:16:28')

그리고 그런 데이터를 얻고 싶습니다 :

employee| step  |  date      | count
E.DF    | step1 | 2017-09-27 | 1
E.DF    | step2 | 2017-09-28 | 2
E.DF    | step1 | 2017-09-29 | 1

이러한 데이터를 단일 쿼리로 추출 할 수 있습니까? 직원이 생산 단계를 완료하지 않은 월의 특정 날짜에 대해 제로 결과를 삽입 할 수 있습니까?

E.DF    | step1 | 2017-09-20 | 0

  • 답변 # 1

    첫 번째 질문 인 "한 번의 쿼리로 이러한 데이터를 추출 할 수 있습니까?"

    SELECT employee, step, date(date), count(*)
    FROM production_control
    GROUP BY employee, step, date(date)
    
    

    두 번째 질문에는 약간 더 복잡한 접근법이 필요하며 그 중 몇 가지가 있습니다. 현재 해당 질문에 대한 답변을 작성하려고하는 mysql 인스턴스에 액세스 할 수 없습니다. 한 가지 아이디어는 가능한 모든 날짜가 포함 된 달력 테이블을 사용하는 접근법을 취하는 것입니다. 그런 다음 프로덕션 제어 테이블을 일정 테이블에 조인하십시오. 재귀 조인으로 다른 방법을 사용할 수 있지만 달력 테이블이 가장 쉽습니다.

  • 이전 sql - 선택 범위 내로 삽입
  • 다음 javascript - 스프레더 및 수집 연산자를 사용하여 Es6에서 다음을 달성하려면 어떻게해야합니까?