一周第一天的值
Posted
技术标签:
【中文标题】一周第一天的值【英文标题】:Values on the frist day of the week 【发布时间】:2021-10-12 21:14:34 【问题描述】:我有一张像下面这样的雪花桌子
StockName Date Value
GOOG 10/12/2021 $100
GOOG 10/11/2021 $995
现在我想创建一个新列,它会给我显示股票在第几周的第一天的价值,这将是星期一或如果星期一是假期则第二天
StockName date Value value_weekstart
GOOG 10/12/2021 $1000 $995
GOOG 10/11/2021 $995 $995
【问题讨论】:
您是否有一个表格(或访问可以加载的数据)来告诉您哪些天是假期……我假设在这种情况下是“股市休市”天?否则,您可以在 Snowflake 中使用dayofweek
函数,但异常不能作为本机函数使用。 docs.snowflake.com/en/sql-reference/functions/year.html
【参考方案1】:
以下应该有效:
SELECT
stockname,
date,
value,
FIRST_VALUE(value) OVER (PARTITON BY stockname, datetrunc('week',date) ORDER BY dayofweekiso(date)) as value_weekstart
FROM table_name
ORDER BY 1,2;
如果有,它将返回“周日价格”,但如果您使用股票 dayofweek
并且有人更改了您实例上的设置,则会避开可能的跳跃。
如果您真的希望星期天是最后一个,请转到 (dayofweekiso(date)+6)%7
将其滚动到最后一个位置。
【讨论】:
字面意思是把这个打出来提交......你打败了我。 :-) 谢谢。但是当我尝试相同时,如果我使用一天作为过滤器,它会给我带来当天的值,而不是对应于一周第一天的值 @Scout75 我很困惑,这段代码必须查看该周的所有值才能获得该周的第一个值。因此,如果要添加“仅一天过滤器”,则必须以不同的形式构造查询。在那一点上更有可能的 cte 更有意义。 在里面混入一些case语句怎么样?从我拥有的解决方案中复制,如果 last_day(as_of) = as_of 然后 1 else 0 以 month_lastday 结束,如果 last_day(as_of, 'week') = as_of 然后 1 else 0 以 week_lastday 结束,如果 dayname(as_of) = 'Mon' then 1 else 0 end as week_firstday @patrick_at_snowflake 不确定这与这个问题有何关系,但我倾向于使用 IFF 形式IFF(LAST_DAY(as_of) = as_of, 1, 0) AS month_lastday, IFF(LAST_DAY(as_of, 'week') = as_of, 1, 0) AS week_lastday, IFF(DAYNAME(as_of) = 'Mon', 1, 0) AS week_firstday
或直接使用布尔值 LAST_DAY(as_of) = as_of AS month_lastday, LAST_DAY(as_of, 'week') = as_of AS week_lastday, DAYNAME(as_of) = 'Mon' AS week_firstday
以上是关于一周第一天的值的主要内容,如果未能解决你的问题,请参考以下文章
实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了