【问题标题】:Get count of day types between two dates获取两个日期之间的日期类型计数
【发布时间】:2022-01-19 01:25:00
【问题描述】:

我正在尝试获取在 BigQuery 标准 sql 中没有找到解决方案的两个日期之间的工作日数。我已经按照发布的示例尝试了 BQ sql 日期函数DATE_DIFF(date_expression_a, date_expression_b, date_part),但它没有显示结果。

例如,我有两个日期 2021-02-132021-03-31,我想要的结果是:

MON TUE WED THUR FRI SAT SUN
6 6 6 6 7 7 7

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    考虑以下方法

    with your_table as (
      select date
      from unnest(generate_date_array("2021-02-13", "2021-03-30")) AS date  
    )
    select * from your_table
    pivot (count(*) for format_date('%a', date) in ('Mon','Tue','Wed','Thu','Fri','Sat','Sun'))     
    

    有输出

    或者你可以简单地做

    select 
      format_date('%a', date) day_of_week, 
      count(*) counts
    from your_table
    group by day_of_week         
    

    有输出

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      SELECT
        CASE EXTRACT(DAYOFWEEK
        FROM
          dates)
          WHEN 1 THEN 'MON'
          WHEN 2 THEN 'TUE'
          WHEN 3 THEN 'WED'
          WHEN 4 THEN 'THU'
          WHEN 5 THEN 'FRI'
          WHEN 6 THEN 'SAT'
          WHEN 7 THEN 'SUN'
      END
        AS day_of_week,
        COUNT(*) AS day_count
      FROM
        UNNEST(GENERATE_DATE_ARRAY("2021-02-13", "2021-03-30")) AS dates
      GROUP BY 1
      

      重要的部分是 GENERATE_DATE_ARRAY 函数,它将返回您感兴趣的日期之间的所有日期。UNNEST 将为每个日期返回一行(而不是所有日期数组的一行) .

      借助 BQ 日期函数,您可以从那里提取星期几,并使用 GROUP BY day_of_week 计算出现次数。

      以上查询给出以下结果:

      【讨论】:

        猜你喜欢
        • 2018-01-11
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 2010-10-05
        • 2017-06-03
        相关资源
        最近更新 更多