[SQL 퀴즈!]마감일이 임박한 이벤트 요약 양식을 작성한 SQL

7965 단어 SQL

입문


며칠 전 쉬워 보이지만 의외로 어려운 SQL을 만났기 때문에 SQL로 문제를 내봤습니다.
모두들 앞을 다투어 답을 생각해 보세요!!

요구 사항

  • 에는 두 개의 모델(표)이 있는데 그것이 바로 사건과 시간표이다.
  • 이벤트는 여러 개의 스케줄링을 가질 수 있다.
  • 어떤 활동은 일정이 하나도 없다.
  • 시간표는 마감일을 설정했다.
  • 이벤트 단위로 동일한 기한이 여러 개 존재하지 않습니다.
  • 아래 조건에 따라 행사와 일정을 제출하시기 바랍니다.
  • 시스템 날짜 이후에 마감일이나 일정이 정해지지 않은 이벤트만 표시됩니다.
  • 여러 개의 스케줄링이 있는 이벤트는 시스템 날짜에 가장 가까운 마감일 스케줄링만 표시합니다.
  • 기한 순서대로 다시 정렬합니다.하지만 일정이 정해지지 않으면 맨 아래에 표시됩니다.
  • 기한이 같으면 이벤트 ID 순서로 다시 정렬합니다(ID가 작을수록 높음).
  • 예제


    이벤트 테이블


    id
    name

    Completed event

    No schedule event

    Continuing event

    Future event 1

    Future event 2

    스케줄러


    id
    event_id
    due_date


    2014/01/23


    2014/01/01


    2014/02/01


    2014/03/01


    2014/01/24


    2014/01/25


    2014/01/24

    예상 출력 결과(시스템 날짜가 2014/01/24인 경우)


    event_id
    name
    schedule_id
    due_date

    Future event 1

    2014/01/24

    Future event 2

    2014/01/24

    Continuing event

    2014/02/01

    No schedule event

    제한 등

  • RDBMS는 PostgreSQL9.2.4(권장)로 설정됩니다.
  • 해답례를 비교하기 쉽도록 RDBMS를 고정하고 싶지만 필요조건이 아니라 추천조건이다.다른 RDBMS도 사용할 수 있습니다.SQL 사투리와 RDBMS 고유의 함수를 자유롭게 사용하십시오.
  • 의 편의를 위해 시스템 날짜는 다음 SQL에서 얻을 수 있는 값으로 설정됩니다.
  • SELECT MAX(sysdate) FROM sysdate_dummy
    

    스키마 생성을 위한 SQL

    CREATE TABLE events (
      id integer PRIMARY KEY
      ,name varchar(50)
    );
    
    INSERT INTO events VALUES (1,'Completed event');
    INSERT INTO events VALUES (2,'No schedule event');
    INSERT INTO events VALUES (3,'Continuing event');
    INSERT INTO events VALUES (4,'Future event 1');
    INSERT INTO events VALUES (5,'Future event 2');
    
    CREATE TABLE schedules (
      id integer PRIMARY KEY
      ,event_id integer
      ,due_date date
    );
    
    INSERT INTO schedules VALUES (1,1,'2014/01/23');
    INSERT INTO schedules VALUES (2,3,'2014/01/01');
    INSERT INTO schedules VALUES (3,3,'2014/02/01');
    INSERT INTO schedules VALUES (4,3,'2014/03/01');
    INSERT INTO schedules VALUES (5,4,'2014/01/24');
    INSERT INTO schedules VALUES (6,4,'2014/01/25');
    INSERT INTO schedules VALUES (7,5,'2014/01/24');
    
    CREATE TABLE sysdate_dummy (
      id integer PRIMARY KEY
      ,sysdate date
    );
    
    INSERT INTO sysdate_dummy VALUES (1,'2014/01/24');
    

    해답 방법

  • 집행 방법은 자유롭지만 사용SQL Fiddle은 간단할 수 있다.
  • SQL이 완료되면 gist 또는 SQL Fiddle의 URL을 이 글의 설명에 붙여넣으십시오.방법을 강구할 곳과 호소점이 있다면 자유롭게 하세요.

  • 기타

  • 우승자에게는 좋은 상품이 없다.순위 계획도 없어요.각자 자기 만족의 세계에서 SQL을 만들어 보세요.
  • 본 과제는 특정 Rails 사건에 필요한 SQL을 기반으로 합니다.Rails 개발자가 Active Record를 사용한다면 어떻게 해야 하나요?
  • 나의 해답 예


    나는 이런 느낌으로 해 보았다.응, 상당히 복잡해~
    아, 자신의 힘으로 답을 생각하고 싶은 사람은 보지 마세요!!
  • http://sqlfiddle.com/#!12/0bea5/2
  • SQL만 보고 싶으신 분은 이쪽을 보세요.
  • https://gist.github.com/JunichiIto/8588344
  • 마지막


    그럼 여러분, Let's try!!

    좋은 웹페이지 즐겨찾기