gpt4 book ai didi

sql - 将具有日期范围的两张表合并为一张表

转载 作者:行者123 更新时间:2023-12-01 11:15:45 28 4
gpt4 key购买 nike

作为对电信数据计费工作的一部分,我从各种来源收集数据以构建准确的成本核算系统。目前,一个表从监管电子表格中获取数据,另一个从各种定价表中获取数据——这些数据以电话号码范围为键,例如

Table 1  (Range, Provider, Status, Valid From, Valid To)
'0113', 'BT', 'Allocated', '2018-01-01 00:00:00', '2018-07-14 23:59:59'
'0113', 'BT2', 'Allocated', '2018-07-15 00:00:00', '2299-12-31 23:59:59'

Table 2 (Range, Price Band, Valid From, Valid To)
'0113', 'Price1', '2018-01-01 00:00:00', '2018-06-30 23:59:59'
'0113', 'Price2', '2018-07-01 00:00:00', '2299-12-31 23:59:59'

Output Table
'0113', 'BT', 'Allocated', 'Price1', '2018-01-01 00:00:00', '2018-06-30 23:59:59'
'0113', 'BT', 'Allocated', 'Price2', '2018-07-01 00:00:00', '2018-07-14 23:59:59'
'0113', 'BT2', 'Allocated', 'Price2', '2018-07-15 00:00:00', '2299-12-31 23:59:59'

现在,我可以通过游标遍历第一个表然后从第二个表中选择记录并根据日期范围彼此重叠的方式输出一系列行来做到这一点,但是有没有一种简单的方法可以使用SQL 语句和一些连接?

最佳答案

您可以尝试使用 JOIN on during date 和 CASE WHEN 判断 SELECT 子句中的日期。

SELECT T1.Range,
T1.Provider,
T1.Status,
T2.[Price Band],
CASE WHEN T1.[Valid From] >= T2.[Valid From] THEN T1.[Valid From]
ELSE T2.[Valid From] END,
CASE WHEN T1.[Valid To] <= T2.[Valid To] THEN T1.[Valid To]
ELSE T2.[Valid To] END
FROM T1 INNER JOIN T2 on
(
T1.[Valid From] between T2.[Valid From] and T2.[Valid To]
OR
T1.[Valid To] between T2.[Valid From] and T2.[Valid To]
)
AND
T1.Range =T2.Range

sqlfiddle

[结果] :
| Range | Provider |    Status | Price Band |           Valid From |             Valid To |
|-------|----------|-----------|------------|----------------------|----------------------|
| 0113 | BT | Allocated | Price1 | 2018-01-01T00:00:00Z | 2018-06-30T23:59:59Z |
| 0113 | BT | Allocated | Price2 | 2018-07-01T00:00:00Z | 2018-07-14T23:59:59Z |
| 0113 | BT2 | Allocated | Price2 | 2018-07-15T00:00:00Z | 2299-12-31T23:59:59Z |

关于sql - 将具有日期范围的两张表合并为一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642477/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com