簡體   English   中英

SQL查詢記錄之間的開始日期和結束日期范圍

[英]SQL Query for start date & end date range between record

我有這樣的數據庫結構:

在此處輸入圖片說明

和輸出是這樣的:

在此處輸入圖片說明

那么,如何進行SQL查詢?

請嘗試以下查詢:

首先,我們需要使用sys.all_objects[master]..spt_values快速生成CalendarData ,如下所示:

DECLARE @MinDate DATE = '2017-01-01',
        @MaxDate DATE = '2017-12-31';

SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
    DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) as CalendarDate
FROM
    sys.all_objects a
CROSS JOIN 
    sys.all_objects b;

有關更多信息,請檢查此鏈接https://sqlperformance.com/2013/01/t-sql-queries/generate-a-set-2

所以完整的解決方案可能像

DECLARE @MinDate DATE = '2017-01-01',
        @MaxDate DATE = '2017-12-31';

WITH calendareDates AS
(
    SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.number) - 1, @MinDate) AS CalendarDate
    FROM    
        [master]..spt_values a
    --CROSS JOIN [master]..spt_values b   -- use this cross join to get more records only if your dates between Start and End Date are over years.
)
SELECT 
    ROW_NUMBER() OVER (ORDER BY CalendarDate) id,
    c.CalendarDate, e.eventTitle, e.eventId  
FROM
    Events e 
LEFT JOIN
    calendareDates c ON c.CalendarDate BETWEEN e.StartDate AND e.EndDate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM