【发布时间】:2019-05-05 18:57:50
【问题描述】:
我正在使用 PostgreSql。我有一个查询,它给出了特定日期范围的值。当没有特定日期的数据时,如何将列设为零。 示例:日期范围为“2018-06-10”到“2018-06-16”,没有日期为 2018-06-15 和 2018-06-16 的数据。我现有的查询返回 10 日、11 日、12 日、13 日和 14 日的数据,但不返回 15 日和 16 日的数据。我怎样才能得到第 15 和第 16 日期的列为零。
这是我的查询:
SELECT 40 AS clientId,
0 AS accountId,
0 AS searchEngineId,
'present' AS dateType,
SUM(em.clicks) AS clicks,
To_date(em.DATE, 'YYYY-MM-dd') AS date
FROM emailreportstats em
WHERE em.clientid = 40
AND em.accountid IN ( 13, 14 )
AND em.DATE BETWEEN '2018-06-10' AND '2018-06-16'
GROUP BY em.DATE,
em.datetype;
执行查询的代码:
Query query = em.createQuery(pSqlQuery, EmailReportStats.class);
emailReportStatses = query.getResultList();
【问题讨论】:
-
您需要对日历进行外部连接(或使用
generate_series()即时生成) -
@a_horse_with_no_name 你能帮帮我吗?我做不到。
-
我试过了,还是没有成功:选择40作为client_id,stats.clicks作为点击,d.day AS date from (SELECT generate_series(timestamp '2018-06-10', timestamp ' 2018-06-16', 间隔 '1 天')::date) d(day)LEFT JOIN (选择 40 作为 clientId, sum(em.clicks) 作为 clicks, to_date(em.date, 'YYYY-MM-dd ') 作为来自 EmailReportStats em 的日期,其中 em.clientId = 40 和 (13,14) 中的 em.accountId 和 em.date 在 '2018-06-10' 和 '2018-06-16' 之间按 em.date、em 分组.dateType)stats ON stats.date = d.day ORDER BY date asc;
标签: postgresql spring-boot hql jpql