我有一张交易表
tbl.transactions
,我们的投资组合的收费会议看起来像这样。
session_id | 站名 | station_id | port_no | session_sd | session_ed | 没有端口 |
---|---|---|---|---|---|---|
1000 | 东 Sp 15 | A:10 | 1 | 2022-11-10 18:24:44.000 | 2022-11-10 21:09:20.000 | 2 |
1001 | 东 Sp 15 | A:10 | 2 | 2022-11-11 18:05:47.000 | 2022-11-11 22:44:02.000 | 2 |
1070 | 东 Sp 15 | A:10 | 2 | 2022-11-27 18:16:03.000 | 2022-11-27 23:45:03.000 | 2 |
1075 | E - 空间 15 | A:10 | 1 | 2022-12-06 17:07:53.000 | 2022-12-06 17:54:36.000 | 2 |
1082 | 东 Sp 15 | A:10 | 1 | 2022-12-10 10:19:56.000 | 2022-12-10 15:22:23.000 | 2 |
1083 | 棕色 - 第 2 批 | B:20 | 1 | 2023-01-14 15:37:15.000 | 2023-01-14 17:51:43.000 | 2 |
1086 | 棕色 - 第 2 批 | B:20 | 2 | 2023-01-21 18:00:35.000 | 2023-01-21 22:21:34.000 | 2 |
我正在尝试创建一个表来显示每个站的开始和结束日期(这样我就可以加入日历表并最终按小时确定利用率)。这些日期反映了从 API 中提取每个电台名称的时间段,即电台的可用性。根据数据的结构,station_name 可以由管理团队更新/更改,station_id 也可能更改或移动位置,如上所示。站也可以有 1 个或 2 个端口。我对其他方法持开放态度,但我能想到的最好方法是为历史车站创建一个看起来像这样的表格。
station_id | 站名 | port_no | station_start | station_end |
---|---|---|---|---|
A:10 | 东 Sp 15 | 1 | 2022-11-10 18:24:44.000 | 2022-11-27 23:45:03.000 |
A:10 | 东 Sp 15 | 2 | 2022-11-10 18:24:44.000 | 2022-11-27 23:45:03.000 |
A:10 | E - 空间 15 | 1 | 2022-11-27 23:45:04.000 | 2022-12-06 17:07:54.000 |
A:10 | E - 空间 15 | 2 | 2022-11-27 23:45:04.000 | 2022-12-06 17:07:54.000 |
A:10 | 东 Sp 15 | 1 | 2022-12-06 17:07:55.000 | 明天的约会 |
A:10 | 东 Sp 15 | 2 | 2022-12-06 17:07:55.000 | 明天的约会 |
B:20 | 棕色 - 第 2 批 | 1 | 2023-01-14 15:37:15.000 | 明天的约会 |
B:20 | 棕色 - 第 2 批 | 2 | 2023-01-14 15:37:15.000 | 明天的约会 |
我不担心“明天的约会”。我如何更新每个后续的
station_start
和 station_end
以反映每个 station_id/station_name 可能进行会话的时间段?
这是我的查询,我得到的最接近的是在使用
start_dt_adj
和LAG
的LEAD
列中。
with number_tbl as (
SELECT 1 as Number
UNION ALL
SELECT Number + 1 FROM number_tbl where Number <=2
)
SELECT * INTO #no_tbl
FROM number_tbl
SELECT DISTINCT x.station_id
,x.station_name
,x.port_no
,x.no_of_ports
,x.station_start
,x.station_end
,CASE WHEN DATEADD(s, -1, LEAD(station_start, 1) OVER(PARTITION BY station_id, port_no ORDER BY station_id, port_no desc, station_start, station_name)) < station_start
THEN DATEADD(s, -1, LEAD(station_start, 1) OVER(PARTITION BY station_id, port_no ORDER BY station_id, port_no desc, station_start, station_name))
WHEN DATEADD(s, 1, LAG(station_end, 1) OVER(PARTITION BY station_id, port_no ORDER BY station_id, port_no desc, station_end, station_name)) IS NOT NULL
THEN DATEADD(s, 1, LAG(station_end, 1) OVER(PARTITION BY station_id, port_no ORDER BY station_id, port_no desc, station_end, station_name))
ELSE station_start END AS start_dt_adj
FROM (
SELECT DISTINCT d.station_id, d.station_name, d.port_no, d.no_of_ports, a.station_start, a.station_end
FROM tbl.transactions d
LEFT JOIN
(
SELECT DISTINCT station_id, station_name
,MIN(session_sd) 'station_start'
,MAX(session_ed) 'station_end'
FROM tbl.transactions
GROUP BY station_id, station_name
) a
ON d.station_id = a.station_id
AND d.station_name = a.station_name
) x
JOIN #no_tbl n
ON x.no_of_ports >= n.Number
• 连续日期的SQL
• 按日期计算行组考虑开始日期和结束日期之间的天数_python
• 有没有办法根据数据框 python 中的另一列日期复制日期?
• 从星期一而不是星期日开始 antd RangePicker(日期选择器)周
• 如何在 sql 查询中使用开始日期和持续时间(分钟|小时|天|月|等)计算结束日期
• 如何计算JAVA中两个不同日期之间的工作天数(不包括周末)?
• R 代码生成 2009-11-06 和 2016-01-01 之间的天数输出为 2247.3333
• SQL:合并与 start_date 和 end_date 几乎相同的行
• 我们如何循环遍历数据框中的日期,并附加字符串以创建有效的 URL?
• 如何在MS ACCESS中从另一个查询中传递PARAMETERS到查询中(不用VBA)?