SQL Query для получения записей с последней недели каждого месяца в течение 4 лет - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть таблица ниже

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 лет

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Вы можете использовать арифметику даты, чтобы получить последнюю неделю каждого месяца.В 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'
      );
0 голосов
/ 01 апреля 2019
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 ()).

...