填补所有小组的日期空白

时间:2018-08-21 11:25:25

标签: sql oracle gaps-in-data

我正在尝试为每个小组填补一堆约会空白。

如果只有一组,我可以毫无问题地进行这项工作,但是当一组以上时,我的约会就不会按我希望的那样填写了。

作为示例,下面的第一个屏幕截图显示了来自查询的数据。第二张屏幕截图显示了我想要的样子。如果我在只有一个州的日期表上进行左联接,那么一切都很好。如果有一个以上的州,差距将无法正确填补。

之前

enter image description here

之后

enter image description here

2 个答案:

答案 0 :(得分:2)

“最便宜的”(使用最少的资源,因此通常运行最快),最可维护的方法是拥有一个日期表和一个状态表。然后,您可以使用这些表为要返回的所有行创建一个“模板”,然后将数据连接到该“模板”。

QWERTY12345

答案 1 :(得分:1)

在这里,使用日历表方法是一种选择。您可以将包含所有日期/状态组合的日历表加入当前表:

WITH dates AS ( 
    SELECT DATE '2018-08-31' AS date FROM dual
    UNION ALL
    SELECT date - 1 AS date
    FROM dates
    WHERE date > DATE '2018-08-01'
),
states AS (
    SELECT 'FL' AS state FROM dual UNION ALL
    SELECT 'GA' FROM dual
)

SELECT
    t1.date,
    t2.state
    t3.qty
FROM dates t1
CROSS JOIN states t2
LEFT JOIN yourTable t3
    ON t1.date = t3.date and t2.state = t3.state
ORDER BY
    t1.date,
    t2.state;