获取两个日期之间的日期类型计数

Get count of day types between two dates

我正在尝试获取我在 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

您可以执行以下操作:

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 函数,它将 return 您感兴趣的日期之间的所有日期。UNNEST 将 return 一行每个日期(而不是所有日期数组的一行)。

从那里,您可以使用 BQ 日期函数提取星期几,并使用 GROUP BY day_of_week.

计算出现的次数

以上查询给出以下结果:

考虑以下方法

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         

有输出