1
我有一個場景,我試圖讓每個分區對應機會的所需的一切。一個記錄中的每個最小和最大日期的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種不同的約會,所以我只是想首先第一個任命,最後1日任命(如果有的話),第一次約會和第二次約會,與其他約會一樣。當我有我需要的所有列時,我可以只查詢row_number字段來帶回RN = 1,這將帶來我需要的一切,至少這是計劃哈哈,提前謝謝
請您提供樣品輸出嗎? – lucky
您的表格沒有'service_appointment'列。 –