【发布时间】:2017-11-06 14:05:05
【问题描述】:
我有一个如下所示的表格:
USER_ID START_DATE END_DATE PRODUCT_ID
1 2015-07-20 2016-07-20 1
1 2003-10-25 2009-01-14 0
2 2007-10-04 2008-05-05 1
等等。
我想要创建的是这样的表:
USER_ID PAYER EXPAYER BASIC
1 0 1 0
2 0 0 1
我确实需要这样,因为我想在之后加入它并按城市分组。 但是,我在每个 USER_D 的表中有多个条目(如上所示)。
我将付款人定义为具有条目 PRODUCT_ID=1 的人,因此今天的日期介于 START 和 END_DATE 之间。
前付款人是指至少有一个这样的条目并且不再有的人。
基本客户是其他任何人。
通过这样做:
CREATE OR REPLACE TABLE MEMBERSHIP AS
SELECT
USER_ID,
COUNT( CASE WHEN PRODUCT_ID=1 AND (CURRENT_DATE BETWEEN DG_START_DATE AND DG_END_DATE) THEN 1 END ) AS 'PAYER',
COUNT( CASE WHEN PRODUCT_ID=1 AND (CURRENT_DATE NOT BETWEEN DG_START_DATE AND DG_END_DATE) THEN 1 END ) AS 'EXPAYER',
COUNT( CASE WHEN NET_PRICE = 0 THEN 1 END ) AS 'BASIC'
FROM CONTRACTS;
但是,我的结果有例如这样的条目,这是错误的:
USER_ID PAYER EXPAYER BASIC
1 4 2 4
等等……
非常感谢!
【问题讨论】:
-
列
NET_PRICE来自哪里?您的示例数据和所需的输出不匹配。 columnBASIC的逻辑是什么? -
顺便说一句:您确定要使用会话相关的
CURRENT_DATE而不是SYSDATE吗? -
简单的复制粘贴错误。想让我的问题尽可能简单,NET_PRICE 在这里并不重要,但存在于实际表中。我不知道使用 CURRENT_DATE 的错误,谢谢。