一周第一天的值

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

以上是关于一周第一天的值的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 PHP获得第一天的一周和最后一天的日期

实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了

java获取本月开始时间和结束时间上个月第一天和最后一天的时间以及当前日期往前推一周一个月

PHP DATE 如何取得当月的第一天和最后一天

Php周第一天

PHP Php周第一天