SQL- 601. 체육관 사람 유동량

1807 단어
프로젝트 설명
X시는 새로운 체육관을 건설했는데 일일 유동량 정보는 이 세 열의 정보에 기록되었다. 그것이 바로 번호(id), 날짜(date), 유동량(people)이다.
조회 문구를 작성하여 러시아워 시간대를 찾아내고 3일 이상 연속해야 하며 매일 인원 유동량이 100보다 적지 않다.
예를 들어, 테이블 stadium:
+------+------------+-----------+
| id   | date       | people    |
+------+------------+-----------+
| 1    | 2017-01-01 | 10        |
| 2    | 2017-01-02 | 109       |
| 3    | 2017-01-03 | 150       |
| 4    | 2017-01-04 | 99        |
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-08 | 188       |
+------+------------+-----------+

위 예제 데이터의 출력은 다음과 같습니다.
+------+------------+-----------+
| id   | date       | people    |
+------+------------+-----------+
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-08 | 188       |
+------+------------+-----------+

Note: 매일 한 줄만 기록되며 날짜는 id가 증가함에 따라 증가합니다.
SQL Server Edition:
DECLARE @sid INT;
DECLARE @sdate DATE;
DECLARE @speople INT;
DECLARE @startdate DATE;
DECLARE  @nextdate Date;
DECLARE  @thisN INT =0;
DECLARE my_coursor CURSOR FOR SELECT id,date,people FROM stadium WHERE people >=100
OPEN my_coursor
FETCH NEXT FROM my_coursor INTO @sid ,@sdate,@speople;
SET @startDate=@sdate;
SET @nextDate=@sdate;
WHILE @@FETCH_STATUS=0
BEGIN
IF(@sdate = DATEADD(DAY,1,@nextDate))
BEGIN
    SET @nextDate=@sdate;
    SET @thisN=@thisN+1;
END
ELSE 
BEGIN
    SET @startDate=@sdate;
    SET @nextDate=@sdate;
    SET @thisN=0;
END
FETCH NEXT FROM my_coursor INTO @sid,@sdate,@speople;
END
CLOSE my_coursor;
DEALLOCATE  my_coursor;
IF(@thisN>=3)
BEGIN
    SELECT * FROM dbo.stadium WHERE date>=@startDate AND date <=@nextDate
END

좋은 웹페이지 즐겨찾기