在Postgres获得黑色星期五的日期

xytpbqjk  于 2022-09-21  发布在  PostgreSQL
关注(0)|答案(2)|浏览(145)

如何在Postgres获得黑色星期五的日期?11月的最后一个星期五,有没有可能买到呢?

zte4gxcn

zte4gxcn1#

使用Max()获取11月的最后一个星期五:

SELECT  MAX(d)::date AS black_friday
    FROM    generate_series('2000-01-01'::timestamp, '2051-01-01'::timestamp, INTERVAL '1 day') g(d)
    WHERE   EXTRACT(month from d) = 11 -- November
    AND     EXTRACT(dow FROM d) = 5 -- Friday
    AND     EXTRACT(DAY FROM d) BETWEEN 23 AND 29
    GROUP BY
        EXTRACT(year FROM d)
    ORDER BY 1;
voj3qocg

voj3qocg2#

基于Frank Heikens的答案(比我的第一个答案好得多,现已删除)和@Damien_the_Unbelieever的更正的黑色星期五定义

select  ("November Thursdays"+'1 day'::interval)::date as "Black Fridays"
from
(   SELECT  "date"::date "November Thursdays",
            row_number() over (partition by EXTRACT(year FROM "date") order by "date")
    FROM    generate_series('2000-01-01'::date, 
                            '2051-01-01'::date, 
                            INTERVAL '1 day') dates("date")
    WHERE   EXTRACT(month from "date") = 11 -- November
    AND     EXTRACT(dow FROM "date") = 4 -- Thursday
    ORDER BY 1) Thursdays
where row_number=4;

相关问题