Crystal reports DB2:如何提取之前的完整月份&x27;表的数据。列?

Crystal reports DB2:如何提取之前的完整月份&x27;表的数据。列?,crystal-reports,db2,Crystal Reports,Db2,我遇到了一个关于Crystal报表的DB2查询的问题。我需要做的是为一个列提取上一个完整月份的数据,即使上一个月是上一年的12月(比如1月)。例如,我有一个名为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=上个月的完整数据,在本例中,该数据为20

我遇到了一个关于Crystal报表的DB2查询的问题。我需要做的是为一个列提取上一个完整月份的数据,即使上一个月是上一年的12月(比如1月)。例如,我有一个名为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年12月,因此应返回“

无论当前月份和年份是什么,提取上一个完整月份数据的代码是什么?当然,它应该是动态的,因此无论何时运行查询,它都会提取上一个完整月份的数据。

试试这个

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版本知道第一天

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

事实上,我能够将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))

我希望这对将来的人有所帮助。

您可以使用任何日期而不是当前日期来返回给定日期前一个月的第一天和最后一天。
这适用于任何Db2版本

SELECT 
  CURRENT DATE - DAY(CURRENT DATE) + 1 - 1 MONTH AS FIRST_DAY
, CURRENT DATE - DAY(CURRENT DATE)               AS LAST_DAY
FROM SYSIBM.SYSDUMMY1;
SELECT 
  CURRENT DATE - DAY(CURRENT DATE) + 1 - 1 MONTH AS FIRST_DAY
, CURRENT DATE - DAY(CURRENT DATE)               AS LAST_DAY
FROM SYSIBM.SYSDUMMY1;