SQL Server窗口用于一个记录中的每个最小和最大日期

时间:2017-11-25 10:45:34

标签: sql sql-server

我有一个场景,我试图在每个分区的一行中获取我需要的所有内容。

我有以下示例,我只想在一行Service_Appointment列中返回每个值的最小值和最大值,以便我可以将其作为另一个数据集的一部分进行查询。我需要它在一行中,这就是为什么我使用row_number函数来查询where RN = 1

有许多行返回机会,我想要做的是使用Createdon的每个约会类型的所有最小值和最大值。

以下是示例数据:

CREATE TABLE #temptable 
(
     [ActivityId] int, 
     [OpportunityId] int, 
     [Appointment_Service] nvarchar(255), 
     [CreatedOn] datetime, 
     [Appt_Booked_Date] datetime, 
     [Appointment_State] nvarchar(255), 
     [Appointment_Status] nvarchar(255), 
     [RN] bigint, 
     [LASTEST_First_Appointment] datetime, 
     [LASTEST_Second_Appointment] datetime 
)

INSERT INTO #temptable
VALUES
    (4176537, 105994, N'1st Appointment', N'2015-01-27T00:00:00', N'2015-01-27T00:00:00', N'Closed', N'Attended', 1, N'2015-01-27T00:00:00', N'2017-11-21T11:25:46' ), 
    (4176536, 105994, N'2nd Appointment', N'2015-01-28T00:00:00', N'2015-01-28T00:00:00', N'Closed', N'Attended', 2, N'2015-01-28T00:00:00', N'2017-11-21T11:25:46' ), 
    (19656494, 105994, N'Other Appointment', N'2017-03-31T15:33:26',  N'2017-03-31T15:33:26', N'Scheduled', N'In Progress', 3, N'2017-11-21T11:25:46', N'2017-11-21T11:25:46' ), 
    (9394803, 105994, N'Other Appointment', N'2017-04-28T06:38:56', N'2017-04-28T06:38:56', N'Scheduled', N'In Progress', 4, N'2017-11-21T11:25:46', N'2017-11-21T11:25:46' ), 
    (3774963, 105994, N'Other Appointment', N'2017-04-28T17:20:06', N'2017-04-28T17:20:06', N'Scheduled', N'In Progress', 5, N'2017-11-21T11:25:46', N'2017-11-21T11:25:46' )

这是我的查询

SELECT  
    ActivityId, OpportunityId,
    Appointment_Service, CreatedOn,
    Appt_Booked_Date, 
    Appointment_State, Appointment_Status,
    ROW_NUMBER() OVER (PARTITION BY OpportunityId ORDER BY CreatedOn, ActivityId) AS RN,
    LAST_VALUE(CreatedOn) OVER (PARTITION BY Appointment_Service ORDER BY CreatedOn, ActivityId ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS LASTEST_First_Appointment
FROM    
    dbo.DIM_APPOINTMENT

有3种不同的约会,所以我只想要第一次任命,最后一次约会(如果有的话),第一次第2次约会和第二次约会,与其他约会相同。当我拥有我需要的所有列时,我可以查询row_number字段以恢复RN = 1,这将带来我需要的一切,至少那个计划大声笑,请提前谢谢

0 个答案:

没有答案