SQL查询以获取每个月的最后一周为4年的记录

时间:2019-04-01 11:16:40

标签: sql teradata

我有下表

ABC  Date 
200    2019-02-22
-200    2019-02-23
1200    2019-02-24
-500    2019-02-25
'
'
'
'
-889   2015-01-11

我需要在每个月的最后一周的每一天从ABC获取值

select ABC
from table 1
where date between '2019-03-26' and '2019-03-30'

这是2019年3月的月份。我如何创建一个循环,使其在3年内每月的最后一周的每一天都显示价值

2 个答案:

答案 0 :(得分:0)

SELECT ABC, DATE FROM table_1 WHERE DATEPART(wk, DATE) = 
DATEPART(wk, EOMONTH(DATE)) AND DATE <= DATEADD(year,3,GETDATE())

DATEPART(wk,DATE)给我那个日期的星期数,DATEPART(wk,EOMONTH(DATE))给我那星期的日期(相应日期月份的最后一天)。因此,当我选中此选项时,我只会选择属于每个月最后一周的日期。下一个过滤器是仅选择从现在起小于3年的那些日期(GETDATE())。

答案 1 :(得分:0)

您可以使用日期算术来获取每月的最后一周。在Terdata中,我认为这是一种解决方案:

select abc
from table1
where (date >= (current_date - extract(day from date) * interval '1 day') - interval '6 day' and
       date <= current_date - extract(day from date) * interval '1 day'
      ) or
      (date >= (current_date - extract(day from date) * interval '1 day') - interval '1 month' - interval '6 day' and
       date <= current_date - extract(day from date) * interval '1 day' - interval '1 month'
      ) or
            (date >= (current_date - extract(day from date) * interval '1 day') - interval '2 month' - interval '6 day' and
       date <= current_date - extract(day from date) * interval '1 day' - interval '12month'
      );