【发布时间】:2020-09-28 15:22:28
【问题描述】:
我在 SQL Server 中有一个时间表,其中包含公共交通工具的 [SERV_ID](服务 ID)、[STATION](车站)、[ARR](到达时间)、[DEP](出发时间)。每个服务都可以每天都在[SERV_DAY]。
目标是总结Serviceday、Service-line、First-station、Last-station以及相应的时间戳。 --> 每天每服务一行。
对于[SERV_ID] N170,这将是:
SERV_DAY SERV_ID FIRST_STATION MIN_DEP LAST_STATION MAX_ARR
2019-08-14 00:00:00 N170 Downtown 2019-08-14 06:06:00 CentralStation 2019-08-14 07:11:00
我尝试通过([SERV_DAY], [SERV_ID]) 进行分区,然后为每个分区获取MAX([ARR]) 和MIN([DEP])。这工作了很长时间,但现在我想为每个最小值和最大值获取对应的 Station。
SELECT
[SERV_DAY],[SERV_ID],
MAX([ARR]) OVER(PARTITION BY [SERV_DAY],[SERV_ID]) AS MAX_ARR,
MIN([DEP]) OVER(PARTITION BY [SERV_DAY],[SERV_ID]) AS MIN_DEP
FROM #demo
稍后我需要在最后一站添加延迟,该延迟在数据集的扩展版本中可用,为 [ARR_EFFECTIVE] 和 [DEP_EFFECTIVE]。希望一旦我知道如何总结如上所述的每日线路,我就能够添加这些属性。
这个话题很接近,但我不明白如何适应“差距和孤岛问题” Min() and Max() based on partition in sql server
我在 dbfiddle 中设置了一个演示数据集 https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=52e53d43a49ddb8f67454e576bfa7d74
谁能帮我完成查询?
【问题讨论】:
-
什么版本的 SQL Server?
-
我使用 Microsoft SQL Server 2017
标签: sql sql-server window-functions