简体   繁体   English

如何在 sql/snowflake 中获取每个月的最大天数

[英]How to do I get the max day of each month in sql/snowflake

I'm trying to return The max day of each month from a data set.我试图从数据集中返回每个月的最大天数。 I say max because it's based on mon-fri uploads.我说最大是因为它基于周一至周五的上传。 So if the last day of the month falls on a Saturday(say 10/31/2019) then the last uploaded date will be on the Friday (10/30/2019).因此,如果本月的最后一天是星期六(比如 10/31/2019),那么最后上传的日期将是星期五(10/30/2019)。

I've tried select max(date) from my_table group by datepart('month',date);我试过从 my_table 组中按 datepart('month',date); select max(date);

You can use dayofweekiso to get only those monday-friday transactions.您可以使用dayofweekiso仅获取那些monday-friday交易。

select max(date), month(case when date) from my_table 
where dayofweekiso(date) between 1 and 5
group by year(date), month(date);

Using the snowflake_sample_date there is a date dimension, Small change to MIkes query .. 1--7 looks good使用snowflake_sample_date 有一个日期维度,对MIkes 查询的小改动.. 1--7 看起来不错

SELECT选择
MAX(d.d_date) FROM MAX(d.d_date) 从
tpcds_sf10tcl.date_dim d WHERE DAYOFWEEKISO(d.d_date) BETWEEN 1 AND 7 GROUP BY YEAR(d.d_date) , MONTH(d.d_date) ORDER BY MAX(d_date); tpcds_sf10tcl.date_dim d WHERE DAYOFWEEKISO(d.d_date) BETWEEN 1 AND 7 GROUP BY YEAR(d.d_date) , MONTH(d.d_date) ORDER BY MAX(d_date);

QUALIFY can be used to create a rank and filter on it on the fly. QUALIFY可用于创建排名并对其进行动态过滤。 So rank on partition by year and month, order by date descending to rank the last days of each month in your table as 1.因此,按年和月在分区上排名,按日期降序排列,将表中每个月的最后几天排名为 1。

SELECT * FROM TABLE
QUALIFY RANK() OVER(PARTITION BY YEAR(DATE), MONTH(DATE) ORDER BY DATE DESC) = 1;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM