You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:在BigQuery中获取当前日期、去年及上月同日的支付数据

解决方案:BigQuery中获取当日、去年同日及上月同日支付值

针对你的需求,我们可以利用BigQuery的日期函数生成目标对比日期,再通过自关联的方式获取对应日期的支付值。以下是可行的SQL代码:

SELECT
  curr.date AS 日期,
  curr.value AS 当前日期支付值,
  last_year.value AS 去年同日支付值,
  last_month.value AS 上月同日支付值
FROM `f_table.agg` curr
LEFT JOIN `f_table.agg` last_year
  ON last_year.date = DATE_SUB(curr.date, INTERVAL 1 YEAR)
LEFT JOIN `f_table.agg` last_month
  ON last_month.date = DATE_SUB(curr.date, INTERVAL 1 MONTH)
ORDER BY curr.date DESC;

代码说明:

  1. 日期计算:

    • DATE_SUB(curr.date, INTERVAL 1 YEAR):直接计算当前日期的去年同日,BigQuery会自动处理闰年(比如2024-02-29的去年同日会是2023-02-28)。
    • DATE_SUB(curr.date, INTERVAL 1 MONTH):计算当前日期的上月同日,若上月没有对应日期(比如3月31日的上月是2月,没有31日),会自动调整为上月最后一天(2024-03-31的上月同日是2024-02-29)。
  2. 自关联逻辑:

    • 通过两次LEFT JOIN分别关联去年同日和上月同日的记录,确保即使某日期没有对应对比数据时,结果仍会保留当前日期的行,对应字段显示为NULL。

你之前代码的问题分析:

  • 第一个LEFT JOIN代码:仅处理了去年同日的关联,未覆盖上月同日的需求;且手动提取年月日进行匹配的方式不够简洁,还可能遗漏闰年、月末日期的特殊情况。
  • 第二个LAG函数代码:LAG(1)只能获取前一行的数据,无法直接定位到去年或上月的同日(因为日期可能不连续,跨年跨月的行号差远大于1),不符合需求。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:07:35