【发布时间】:2017-09-17 15:53:08
【问题描述】:
以下查询是按对象查找事件为“常规”时的天数,但查询结果显示“清除”,因为该对象在指定的日期范围内。有没有办法让这个查询只显示在 2017 年 4 月 10 日到今天的日期范围内具有“常规”事件的对象?我尝试了 Event NOT IN C or S 并在 where 子句中移动 Event,但得到了相同的结果。
表 1:
Cal_Date Object Event Time Stamp Time Stamp
4/10/2017 Soap Regular 4/10/2017 4/10/2017
4/11/2017 Soap Sale 4/11/2017 4/14/2017
4/12/2017 Soap Sale 4/11/2017 4/14/2017
4/13/2017 Soap Sale 4/11/2017 4/14/2017
4/14/2017 Soap Sale 4/11/2017 4/14/2017
4/15/2017 Soap Regular 4/15/2017 4/20/2017
4/16/2017 Soap Regular 4/15/2017 4/20/2017
4/17/2017 Soap Regular 4/15/2017 4/20/2017
4/18/2017 Soap Regular 4/15/2017 4/20/2017
4/19/2017 Soap Regular 4/15/2017 4/20/2017
4/20/2017 Soap Regular 4/15/2017 4/20/2017
4/10/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/11/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/12/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/13/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/14/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/15/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/16/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/17/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/18/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/19/2017 Shampoo Clearance 4/10/2017 12/31/2017
4/20/2017 Shampoo Clearance 4/10/2017 12/31/2017
SELECT
OBJECT
COUNT(CASE WHEN EVENT='Regular'AND CAL_DATE BETWEEN DATE '4/10/2017' AND CURRENT_DATE THEN 1 END) AS DAYS
FROM TABLE 1
GROUP BY
OBJECT
查询结果:
Object Days
Soap 7
Shampoo ?
期望的结果:
Object Days
Soap 7
【问题讨论】:
-
使用 HAVING 语句。
-
我不知道 teradata,但不能简单地将这些条件放在 WHERE 子句中,然后 count(*) 吗?在 Oracle 中这工作正常:
Select OBJECT, count(*) From TEST_MYTABLE01 WHERE EVENT='Regular' AND CAL_DATE BETWEEN to_date('10.04.2017','dd.mm.yyyy') AND sysdate Group by OBJECT -
您的查询无法返回您的结果
Shampoo ?,而是Shampoo 0。 -
Teradata 中略有不同的语法是(因为 OBJECT 是保留字,您必须引用它。考虑更改列名)
select "OBJECT", count(*) from Table1 where EVENT = 'Regular' and CAL_DATE between '2017-04-10'(date) and current_date Group by "OBJECT";