0

我正在尝试为每个组填补一堆日期空白。

如果只有一组,我可以毫无问题地完成这项工作,但是当有多个组时,我的日期不会按照我的意愿填写。

例如,下面的第一个屏幕截图显示了来自我的查询的数据。第二个屏幕截图显示了我希望它的样子。如果我在只有一个州的日期表上进行左连接,一切都很好。如果有多个州,则无法正确填补空白。

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

2

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

SELECT
  *
FROM
  dates_table    d
CROSS JOIN
  states_table   s
LEFT JOIN
  data_table     t
    ON  t.date_value = d.date_value
    AND t.state_id   = s.state_id
WHERE
      d.date_value BETWEEN x AND y
  AND s.state_id   IN (1, 2)
于 2018-08-21T11:32:51.270 回答
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;
于 2018-08-21T11:31:40.093 回答