【发布时间】:2019-11-25 00:35:39
【问题描述】:
我想在数据库表中排序结果,使其如下所示...
----------------------------------------------------------------------
Id | Day | Start Date | End Date |
----------------------------------------------------------------------
13D377E8-7674-4BE8-ACDF-472B634342D3 | 1 | 2019-11-26 | 2019-11-26 |
13D377E8-7674-4BE8-ACDF-472B634342D3 | 2 | 2019-11-27 | 2019-11-27 |
13D377E8-7674-4BE8-ACDF-472B634342D3 | 3 | 2019-11-28 | 2019-11-28 |
78C8F3AD-DE5B-48BD-849A-6E39C7EC6200 | 1 | 2019-11-27 | 2019-11-27 |
78C8F3AD-DE5B-48BD-849A-6E39C7EC6200 | 2 | 2019-11-28 | 2019-11-28 |
78C8F3AD-DE5B-48BD-849A-6E39C7EC6200 | 3 | 2019-11-29 | 2019-11-29 |
B73ECD8B-5760-4F92-94E5-CF5270AEE36B | 1 | 2019-11-28 | 2019-11-28 |
B73ECD8B-5760-4F92-94E5-CF5270AEE36B | 2 | 2019-11-29 | 2019-11-29 |
B73ECD8B-5760-4F92-94E5-CF5270AEE36B | 3 | 2019-11-30 | 2019-11-30 |
- 每组日期按 ID 分组
- 需要在组内从最低到最高显示天数
- 组需要按每组第一天的开始日期升序排列
我尝试了以下操作...
SELECT Id, Day, Start Date, End Date
FROM Table
GROUP BY Id, Day, Start Date, End Date
但可以预见的是,它的排序不正确。您可以从下图中看到,由于开始日期最早,应该首先出现的组出现在列表的更下方。
我该如何解决这个问题?
编辑
我使用以下 SQL 尝试了以下解决方案...
SELECT Id, Day, StartDate, EndDate FROM AssessmentCentreStandardAssessmentAvailabilityScheduleItemSchedule
WHERE AssessmentCentreStandardAssessmentAvailabilityScheduleItemId in
(SELECT Id FROM AssessmentCentreStandardAssessmentAvailabilityScheduleItem
WHERE AssessmentCentreStandardAssessmentAvailabilityId =
(SELECT Id FROM AssessmentCentreStandardAssessmentAvailability WHERE AssessmentCentreId =
(SELECT Id FROM AssessmentCentre WHERE Name = 'Daily Assessment Centre')))
ORDER BY
MIN(StartDate) OVER(PARTITION BY Id),
Id,
Day,
StartDate
请注意,为简洁起见,我没有在原始帖子中包含 where 子句。我不认为它会影响结果,但发布只是以防万一。
这将返回以下内容......
它不是按 Id 或 Day 分组的,只是似乎按 Start Date 升序排序。
只是在视觉上重申标准,以防不清楚:
- 我需要将具有相同 ID 的记录组合在一起。
- 我需要按升序显示的 id 组中的每一天(请注意,没有与同一 Id 相关联的重复天数)
- 然后我需要在每个组的第一天的开始日期之前对所有组进行排序。会有重叠 - 因此第 1 组中第 2 天的开始日期将与第 2 组中第 1 天的开始日期匹配,依此类推。
【问题讨论】:
标签: sql sql-server tsql sql-order-by window-functions