此查询需要返回价格表中与特定日期列表匹配的行的所有列。日期列表的要求在下面的伪查询中的()之间。
这里的问题是如何建立日期列表。
这个要求超出了我目前对SQL的理解,但希望我可以从你的回答中学习。
-- Given two tables, price_tbl (column price_date) and holiday_tbl (column holiday_date):
select * from price_tbl where price_date in
( 1. Last business day of every Month from current_date - 30 months to 24 months later -- (total of 24 months)
2. Last business day of every Week from last date of '1.' to 24 weeks later -- (total of 24 weeks)
3. Every business day from last date of '2.' to current_date -- (variable number of days - approx 3 to 33 days possible)
)
order by price_date;
注意:
对于' 1。'和' 2。' holiday_tbl中的任何工作日必须是 替换为不在holiday_tbl中的最近的前一个工作日。
对于' 3。' holiday_tbl中的任何日期都被排除在外。
可以假设没有填补的连续假期 整整一周。
我有一个Excel表格,其中包含如上所述的日期模式。 FWIW,这里列出了公式,以防他们提供帮助:
--
-- Excel formulas that match the above:
--
-- First Month (in cell B3) : =IF(WEEKDAY(EOMONTH(TODAY(),-30),2)>5,WORKDAY(EOMONTH(TODAY(),-24),-1,'PubHol'!$B$5:$B$54),EOMONTH(TODAY(),-30))
-- Next 23 months (in cell B4:B26) : =IF(WEEKDAY(EOMONTH($B3,1),2)>5,WORKDAY(EOMONTH($B3,1),-1,'PubHol'!$B$5:$B$54),EOMONTH($B3,1))
-- First Week (in cell B27) : =IF(WEEKDAY($B26,2)=5,$B26+7,WORKDAY($B26+(6-WEEKDAY($B26,2)),-1,'PubHol'!$B$5:$B$54))
-- Next 23 weeks (in cell B28:B50): =WORKDAY($B27+9,-1,'PubHol'!$B$5:$B$54)
-- All following days : =WORKDAY($B50,1,'PublHol'!$B$5:$B$54)
--
答案 0 :(得分:0)
使用Postgresql query between date ranges上建议的SQL查询。 大多数语言都有日期API。使用它根据提供的输入生成精确的日期。
输入(周/日/月) - >将其转换为确切日期 - >创建一个获取此日期并触发查询的函数。
另外,您可以使用Postgres数据库的日期/时间功能
https://www.postgresql.org/docs/current/static/functions-datetime.html