我有一个场景,我试图在每个分区的一行中获取我需要的所有内容。
我有以下示例,我只想在一行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,这将带来我需要的一切,至少那个计划大声笑,请提前谢谢