0

我正在尝试将两个表连接起来,其中一个带有date列,另一个表带有 datetime列。说A可能相等的表的日期落在表B中连续行的日期时间范围之间。我想汇总表B的连续行的日期之间的值。我在下面制作了小示例表和预期结果。(请注意:此处显示的表可作为视图使用(使用现有表创建的临时表)。表的实际大小非常大,大约有 50 万行,每列大约 50 列,连接是基于其他列完成的还)

表 A

+---------------------+
|      DateTime       |
+---------------------+
| 2020-01-01 08:00:00 |
| 2020-01-04 08:00:00 |
| 2020-01-07 08:00:00 |
| 2020-01-07 09:00:00 |
| 2020-01-08 08:00:00 |
| 2020-01-11 08:00:00 |
| 2020-01-14 08:00:00 |
| 2020-01-14 15:00:00 |
| 2020-01-16 08:00:00 |
| 2020-01-19 10:00:00 |
+---------------------+

表 B

+------------+-------+
|    Date    | value |
+------------+-------+
| 2020-01-01 |     2 |
| 2020-01-02 |     7 |
| 2020-01-04 |     5 |
| 2020-01-05 |     1 |
| 2020-01-06 |     1 |
| 2020-01-08 |     6 |
| 2020-01-10 |     8 |
| 2020-01-11 |     4 |
| 2020-01-13 |     7 |
| 2020-01-17 |     6 |
+------------+-------+

我正在寻找的结果表应如下所示

表 C

+--------------------+-------+
|      DateTime      | Value |
+--------------------+-------+
| 2020-01-0108:00:00 |     9 |
| 2020-01-0408:00:00 |     7 |
| 2020-01-0708:00:00 |     0 |
| 2020-01-0807:00:00 |    14 |
| 2020-01-0808:00:00 |    14 |
| 2020-01-1108:00:00 |    11 |
| 2020-01-1408:00:00 |     0 |
| 2020-01-1415:00:00 |     0 |
| 2020-01-1608:00:00 |     6 |
| 2020-01-1910:00:00 |     0 |
+--------------------+-------+

期待建议和解决方案。

先感谢您。

4

1 回答 1

0

这可能不是完整的解决方案,但你可以做这样的事情..

WITH T1 AS (
SELECT
    a.*, LEAD(COLUMN1, 1) OVER(
ORDER BY
    COLUMN1) AS LEAD_COL  --Use Lead function to get next line value
FROM
    TABLE_A a)
SELECT
    COLUMN1,
    CAST(COLUMN1 AS DATE) AS NEW_COL1, -- This is to convert timestamps to dates
    CAST(LEAD_COL AS DATE) AS NEW_COL2,
    TABLE_B.*
FROM
    T1
JOIN TABLE_B ON
    (DATE_COL >= CAST(COLUMN1 AS DATE)
    AND DATE_COL <CAST(LEAD_COL AS DATE) ) -- JOIN WITH TABLE B . AFTER this sum the records TO GET FINAL OUTPUT

TABLE_STRUCTURE

最终输出

于 2020-11-23T22:42:05.037 回答