> 데이터 베이스 > MySQL 튜토리얼 > SQL Server에서 여러 게스트 등록에 대한 날짜 범위를 효율적으로 생성하는 방법은 무엇입니까?

SQL Server에서 여러 게스트 등록에 대한 날짜 범위를 효율적으로 생성하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-10 11:56:43
원래의
594명이 탐색했습니다.

How to Efficiently Generate a Date Range for Multiple Guest Registrations in SQL Server?

SQL Server에서 게스트 등록 날짜 범위를 효율적으로 생성

기사 제목은 정확하지만 게스트의 체크인 및 체크아웃 날짜를 기준으로 매일 게스트별로 행을 생성하는 구체적인 시나리오를 완전히 전달하지는 않습니다. 이 향상된 답변은 특수한 조회 테이블을 사용하여 효율성을 달성하는 기술을 탐구합니다.

전용 조회 테이블 사용

ROW_NUMBER() 함수를 사용하는 솔루션은 이 특정 작업에 대해 뛰어난 효율성을 제공합니다. 다음 최적화된 쿼리는 조회 테이블을 활용하여 필요한 날짜 범위를 생성합니다.

<code class="language-sql">DECLARE @start DATE, @end DATE;
SELECT @start = '20110714', @end = '20110717';

;WITH n AS 
(
  SELECT TOP (DATEDIFF(DAY, @start, @end) + 1)
    n = ROW_NUMBER() OVER (ORDER BY [object_id])
  FROM sys.all_objects
)
SELECT 'Bob', DATEADD(DAY, n-1, @start)
FROM n;</code>
로그인 후 복사

여러 게스트로 확장

이 기술을 여러 게스트에게 확장하려면 다음 쿼리를 적용할 수 있습니다.

<code class="language-sql">DECLARE @t TABLE
(
    Member NVARCHAR(32),
    RegistrationDate DATE,
    CheckoutDate DATE
);

INSERT @t SELECT N'Bob', '20110714', '20110717'
UNION ALL SELECT N'Sam', '20110712', '20110715'
UNION ALL SELECT N'Jim', '20110716', '20110719';

;WITH [range](d,s) AS 
(
  SELECT DATEDIFF(DAY, MIN(RegistrationDate), MAX(CheckoutDate))+1, MIN(RegistrationDate) 
  FROM @t 
),
n(d) AS
(
  SELECT DATEADD(DAY, n-1, (SELECT MIN(s) FROM [range]))
  FROM (SELECT ROW_NUMBER() OVER (ORDER BY [object_id]) 
  FROM sys.all_objects) AS s(n)
  WHERE n <= (SELECT d FROM [range])
)
SELECT t.Member, n.d
FROM @t t
INNER JOIN n ON n.d BETWEEN t.RegistrationDate AND t.CheckoutDate;</code>
로그인 후 복사

이 수정된 쿼리는 제공된 테이블의 모든 구성원에 대해 필요한 날짜 범위를 효과적으로 생성합니다.

위 내용은 SQL Server에서 여러 게스트 등록에 대한 날짜 범위를 효율적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿