DB2: Как я могу получить данные предыдущих полных месяцев для table.column? - PullRequest
1 голос
/ 09 января 2020

У меня проблема с запросом DB2 для Crystal Report. Что мне нужно сделать, это получить данные за предыдущий полный месяц для столбца, даже если предыдущий месяц является декабрем предыдущего года (как, например, в январе). Например, у меня есть таблица с именем TABLE:

Name    Date
John    11/01/2019
Dave    12/15/2019
Frank   01/02/2020

Мне нужно что-то вроде

select DATE from TABLE where month(DATE) = month(x)

В этом случае x = полные данные за предыдущий месяц, что в данном случае, будет декабрь 2019 года, поэтому он должен вернуть "

Dave  12/15/2019"

Какой код используется для извлечения данных за предыдущий полный месяц, независимо от текущего месяца и года? Конечно, это должен быть динамический c, поэтому он будет извлекать данные за предыдущий полный месяц независимо от того, когда выполняется запрос.

Ответы [ 3 ]

1 голос
/ 09 января 2020

Попробуйте это

select date from table
where date between last_day(current_date - 1 month) + 1 day - 1 month
              and last_day(current_date - 1 month)

или если ваша версия db2 знает first_day

select date from table
where date between first_day(current_date - 1 month)
              and last_day(current_date - 1 month)
0 голосов
/ 09 января 2020

Вы можете использовать любую дату вместо текущей, чтобы вернуть первый и последний дни месяца, предшествующие данной дате.
Это работает для любой версии Db2.

SELECT 
  CURRENT DATE - DAY(CURRENT DATE) + 1 - 1 MONTH AS FIRST_DAY
, CURRENT DATE - DAY(CURRENT DATE)               AS LAST_DAY
FROM SYSIBM.SYSDUMMY1;
0 голосов
/ 09 января 2020

Мне действительно удалось собрать документацию IBM, чтобы использовать версии DB2 DATEPART и DATEADD. Вот что я придумал:

WHERE (DATE_PART('MONTH', COLUMN_DATE) = DATE_PART('MONTH', CURRENT_DATE - 1 MONTH) AND
DATE_PART('YEAR', COLUMN_DATE) = DATE_PART('YEAR', CURRENT_DATE - 1 MONTH))

Надеюсь, это поможет кому-то в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...