【问题标题】:Question: Joining two data sets with date conditions问题:连接两个具有日期条件的数据集
【发布时间】:2021-01-01 11:47:44
【问题描述】:

我对 SQL 很陌生,我正在努力找出一个看似简单的任务。

情况如下:

  • 我正在处理两个数据集
  • 数据集A,最准确但每季度刷新一次
  • 数据集 B,包含所有日期,包括最新数据,但总体上不太准确
  • 我的目标是合并两个数据集,其中我将有数据集 A 用于截至最近一个季度的所有数据,而数据集 B 用于任何之后的数据(即所有最近的数据未在数据集 A 中捕获)

例如:

  • 数据集 A 包含 2020 年第一季度(1 月至 3 月)的所有数据
  • 假设我们是 4 月 15 日
  • 数据集 B 包含从 2020 年第一季度到最新日期 4 月 15 日的所有数据
  • 我的目标是将数据集 A 用于 2020 年 1 月至 3 月(第一季度)的所有数据,然后将数据集 B 用于 4 月 1 日至 15 日的所有数据

关于如何做到这一点的任何想法或建议?可能是一个连接函数和一个日期函数? 任何帮助将不胜感激。

提前感谢您的帮助。

【问题讨论】:

标签: sql date join


【解决方案1】:

我希望你的问题是正确的。

我输入了一些可能与您的描述相符的示例数据:日期和金额。为简单起见,每个月一行。您可以从日期中提取季度,并将其保留为附加列,然后按该列过滤。

WITH
-- some sample data: date and amount ...
indata(dt,amount) AS (
          SELECT DATE '2020-01-15', 234.45
UNION ALL SELECT DATE '2020-02-15', 344.45
UNION ALL SELECT DATE '2020-03-15', 345.45
UNION ALL SELECT DATE '2020-04-15', 346.45
UNION ALL SELECT DATE '2020-05-15', 347.45
UNION ALL SELECT DATE '2020-06-15', 348.45
UNION ALL SELECT DATE '2020-07-15', 349.45
UNION ALL SELECT DATE '2020-08-15', 350.45
UNION ALL SELECT DATE '2020-09-15', 351.45
UNION ALL SELECT DATE '2020-10-15', 352.45
UNION ALL SELECT DATE '2020-11-15', 353.45
UNION ALL SELECT DATE '2020-12-15', 354.45
)
-- real query starts here ...
SELECT
  EXTRACT(QUARTER FROM dt) AS the_quarter
, CAST(
    TIMESTAMPADD(
      QUARTER
    , CAST(EXTRACT(QUARTER FROM dt) AS INTEGER)-1
    , TRUNC(dt,'YEAR')
    ) 
    AS DATE
  ) AS qtr_start
, *
FROM indata;
-- out  the_quarter | qtr_start  |     dt     | amount 
-- out -------------+------------+------------+--------
-- out            1 | 2020-01-01 | 2020-01-15 | 234.45
-- out            1 | 2020-01-01 | 2020-02-15 | 344.45
-- out            1 | 2020-01-01 | 2020-03-15 | 345.45
-- out            2 | 2020-04-01 | 2020-04-15 | 346.45
-- out            2 | 2020-04-01 | 2020-05-15 | 347.45
-- out            2 | 2020-04-01 | 2020-06-15 | 348.45
-- out            3 | 2020-07-01 | 2020-07-15 | 349.45
-- out            3 | 2020-07-01 | 2020-08-15 | 350.45
-- out            3 | 2020-07-01 | 2020-09-15 | 351.45
-- out            4 | 2020-10-01 | 2020-10-15 | 352.45
-- out            4 | 2020-10-01 | 2020-11-15 | 353.45
-- out            4 | 2020-10-01 | 2020-12-15 | 354.45

如果您按季度过滤,您可以按该列对数据进行分组...

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2017-08-17
    • 2020-08-30
    • 1970-01-01
    • 2015-12-29
    • 2017-08-25
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多