Netezza 一年中第 n 周的第一天

First Day of nth Week of the Year in Netezza

如何找到一年中第 n 周第一天的日期?例如,以下所有查询:

SELECT DATE_PART('WEEK', '2019-07-22 01:12:07'::timestamp);
SELECT DATE_PART('WEEK', '2019-07-23 01:12:07'::timestamp);
SELECT DATE_PART('WEEK', '2019-07-24 01:12:07'::timestamp);

给30,因为这三个日期都在2019年的第30周

我的问题是如何做相反的事情。在我的 SQL 版本中,每周从星期一开始(如果您从星期日开始,这不是问题 - 我可以进行调整)因此第 30 周的第一天是 2019-07-22(今天是星期一)。我如何输入周数 30 并获取该周的第一天,即 2019-07-22(或 07-21,如果一周的第一天在您的 SQL 中是星期日)

你必须找到上一年最后一个星期一的日期并向其添加 7 * {week-number} 天

P.S:不要忘记计算有 2 月 29 日的年份 :)

事实证明,解决方案其实很简单。我不得不要求它提出我猜的解决方案。这是第 30 周的内容:

SELECT ('2019-01-01'::timestamp + (30-1)*7 - (DATE_PART('DOW', DATE '2019-01-01')-2))
-- Result: 2019-07-22

我基本上是从初一开始,加上(n-1)*7,并调整初一不是星期一