【发布时间】:2014-02-27 23:38:08
【问题描述】:
SELECT (CASE WHEN ymd BETWEEN CURRENT_DATE -4 AND CURRENT_DATE -1 THEN '3day total'
WHEN ymd BETWEEN CURRENT_DATE -11 AND CURRENT_DATE -1 THEN '10day total'
WHEN ymd BETWEEN CURRENT_DATE -31 AND CURRENT_DATE -1 THEN '30day total' END) AS 'Period',
SUM(cost) cost
FROM table
WHERE ymd BETWEEN CURRENT_DATE -31 AND CURRENT_DATE -1
GROUP BY 1
结果实际上似乎给了我第 1-3 天、第 4-10 天和第 11-30 天的时段。我相信这是因为存在重叠的条件,一旦满足第一个条件,SQL 就会停止处理 CASE 语句。
我想要的是每个桶的总数(即 3 天总和、10 天总和和 30 天总和)。
有没有办法在不添加额外字段的情况下做到这一点?
PS - 语法与传统 sql 有点不同,因为它是 vsql (vertica)。
【问题讨论】:
-
vsql一个用于基于 Unix 的系统的前端实用程序,提供元命令和各种类似 shell 的功能,便于编写 SQL -
我不知道 Vertica 是如何处理日期/时间/时间戳类型的,但您一般don't want to use BETWEEN with them。将时间戳(和一般的时间)视为自然数序列 - 在精确整数之前没有“最后一个”值(小数秒在概念上是无限的)。