【问题标题】:DATE_DIFF Function Possibilities in BigqueryBigquery 中的 DATE_DIFF 函数可能性
【发布时间】:2021-08-06 08:58:28
【问题描述】:

目前我一直在寻找如何将 Datediff 分组到历史时期。 假设有 2 个人的活动日期:假设今天 Current_date 是 2021-05-17

ID     Active_date   Current_date    Date_diff
10001  2021-05-14    2021-05-17      3
10002  2021-05-12    2021-05-17      5
10002  2021-05-04    2021-05-17      13
10001  2021-05-01    2021-05-17      16

我要显示的是 Current_date - Active_date = Datediff 的历史记录

ID     Active_date   Current_date    Date_diff
10001  2021-05-14    2021-05-17      3
10002  2021-05-12    2021-05-17      5
10002  2021-05-04    2021-05-17      13
10001  2021-05-01    2021-05-17      16
10001  2021-05-14    2021-05-16      2
10002  2021-05-12    2021-05-16      4
10002  2021-05-04    2021-05-16      12
10001  2021-05-01    2021-05-16      15
....... and so on, until Date_diff is zero

如何在 Bigquery/Oracle 上实现这一点?

【问题讨论】:

  • 您是否尝试在 Oracle 中执行此操作?还是在 BigQuery 中?它们是不同的数据库,支持不同的 SQL 方言,具有不同的内置功能。
  • 该输出在例如第五步?它是否仍然有 4 行(但对于 ID = 10001,它保持 DATE_DIFF = 0,或者它是否从列表中删除,或者......?此外,CURRENT_DATE 是该表中的列,还是您只是“知道”当前日期是(哪个当前日期是“今天”)?
  • @Littlefoot 它重复直到 min(active_date)。而对于 current_date,我只是使用示例,所以如果您在明天之前阅读此内容,您不会有错误的想法
  • @JustinCave 我同时使用 Oracle 和 Bigquery
  • 您是否正在尝试查找在两个数据库中都有效的单个查询?还是您要问两个单独的问题(每个数据库一个)?

标签: oracle date google-bigquery datediff


【解决方案1】:

试试generate_date_array:

with mytable as (
  select 10001 as id, date '2021-05-14' as active_date union all
  select 10002, date '2021-05-12'
)
select *, date_diff(curren_date, active_date, day) as diff
from mytable, unnest(generate_date_array(active_date, current_date())) as curren_date

【讨论】:

    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    相关资源
    最近更新 更多