sql - SQL Server 分区窗口中多个属性的 Min() 和 Max()
问题描述
我在 SQL Server 中有一个时间表,其中包含公共交通工具的[SERV_ID]
(service-id)、[STATION]
(station)、[ARR]
(arrivaltime)、 (departuretime)。[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])
一个 then getMAX([ARR])
和MIN([DEP])
每个分区进行分区来做到这一点。这工作了很长时间,但现在我想为每个最小值和最大值获取相应的站。
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]
. 希望一旦我知道如何总结如上所述的每日线路,我就能够添加这些属性。
这个主题很接近,但我不知道如何 根据 sql server 中的分区调整“间隙和孤岛问题”Min() 和 Max()
我在 dbfiddle https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=52e53d43a49ddb8f67454e576bfa7d74中设置了一个演示数据集
谁能帮我完成查询?
解决方案
SELECT
[SERV_DAY]
,[SERV_ID],
FIRST_VALUE(STATION) over (Partition by [SERV_DAY],[SERV_ID] Order by ARR DESC) Station1
, FIRST_VALUE(STATION) over (Partition by [SERV_DAY],[SERV_ID] Order by DEP ASC) Station2
FROM #demo
推荐阅读
- php - 使用php在三个下拉选定值上上传文件
- c# - SQL查询填写backgroundworker后数据表不显示信息
- html - 引导类“d-sm-none”的 div 显示在每个屏幕尺寸上
- c++ - TCP客户端服务器程序
- r - 如何将包含month_year的字符列表转换为字符向量
- javascript - Express.js 中间件可以依赖链中先前的中间件吗?
- macos - Supervisord - 如何在文件路径中使用带有空格的命令
- python - 如何使用 scrapy 和 pyinstaller 在 Windows 10 中创建单个可执行文件?
- angular - 关闭或提交后如何丢弃或清除 MatDailog 数据
- javascript - 发送前检查 URL 表单(服务器端)