首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2: DB2报告的双月查询

DB2: DB2报告的双月查询
EN

Stack Overflow用户
提问于 2020-02-03 21:18:32
回答 2查看 74关注 0票数 0

我目前正在编写一个以DB2查询作为后端的水晶报告。我已经完成了查询,但仍然停留在它的日期部分。我将每月运行两次--一次在16号,另一次在下个月的第一次。下面是它的工作原理:

  • 如果我在这个月的16日运行它,它会给我从那个月的第一个到那个月的第15号的结果。
  • 如果我在下个月的第一天运行它,它将给我从上个月的16日到上个月的最后一天的结果。

这是一份基本的双月报告。我在T中找到了很多这样做的提示,但对于如何在DB2中实现这一点,我没有找到有效的方法。考虑到月长等方面的差异,我很难把我的头绕在逻辑上,才能使它持续工作。

EN

回答 2

Stack Overflow用户

发布于 2020-02-04 07:00:58

根据传递的报告日期,间隔的开始日期和结束日期有两个表达式,您可以在where子句中使用该表达式。

其逻辑如下:

1)如果报告日期是一个月的第一天,则:

DATE_START是上个月的第16次

DATE_END是上个月的最后一天

2)否则:

DATE_START是本月的第一名。

DATE_END是本月的十五号。

代码语言:javascript
复制
SELECT
  REPORT_DATE
, CASE DAY(REPORT_DATE) WHEN 1 THEN REPORT_DATE - 1 MONTH + 15 ELSE REPORT_DATE - DAY(REPORT_DATE) + 1  END AS DATE_START
, CASE DAY(REPORT_DATE) WHEN 1 THEN REPORT_DATE - 1            ELSE REPORT_DATE - DAY(REPORT_DATE) + 15 END AS DATE_END
FROM 
(
VALUES 
  DATE('2020-02-01')
, DATE('2020-02-05')
, DATE('2020-02-16')
) T (REPORT_DATE);

结果是:

代码语言:javascript
复制
|REPORT_DATE|DATE_START|DATE_END  |
|-----------|----------|----------|
|2020-02-01 |2020-01-16|2020-01-31|
|2020-02-05 |2020-02-01|2020-02-15|
|2020-02-16 |2020-02-01|2020-02-15|
票数 1
EN

Stack Overflow用户

发布于 2020-02-04 05:26:46

在Db2 (对于Unix、Linux和Windows)中,它可能是一个类似于

代码语言:javascript
复制
WHERE
 (CASE WHEN date_part('days', CURRENT date) > 15 THEN yourdatecolum >= this_month(CURRENT date) AND yourdatecolum < this_month(CURRENT date) + 15 days
  ELSE  yourdatecolum > this_month(CURRENT date) - 1 month + 15 DAYS AND yourdatecolum < this_month(CURRENT date)
  END)

查看月份函数--有多种方法可以实现它。此外,月份可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60047294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档