выведите 2 поля SPEED_UPGRADE и TV_PACKAGE из 3 таблиц

#teradata

Вопрос:

Мне нужно вывести 2 поля SPEED_UPGRADE и TV_PACKAGE из 3 таблиц. Я написал код ниже. Я не получаю правильного подсчета «СКОРОСТИ» и «ТЕЛЕВИЗОРА», которые находятся между start_dt и END_DT. скорее, это дает мне подсчет всех «СКОРОСТИ» и «ТЕЛЕВИЗОРА». Пожалуйста, оптимизируйте мой запрос .

 select lt;few columnsgt;, count (case WHEN Cast('2021-11-09 00:00:00' AS TIMESTAMP(0))   BETWEEN a.START_DT AND Coalesce(a.END_DT,Cast('9999-12-31 00:00:00' AS TIMESTAMP FORMAT 'Y4-MM-DDBHH:MI:SS')) AND b.VOUCHER_TYPE_CD='SPEED'   then 1   ELSE 0  end) SPEED_UPGRADE, count(case WHEN Cast('2021-11-09 00:00:00' AS TIMESTAMP(0))   BETWEEN a.START_DT AND Coalesce(a.END_DT,Cast('9999-12-31 00:00:00' AS TIMESTAMP FORMAT 'Y4-MM-DDBHH:MI:SS')) AND b.VOUCHER_TYPE_CD='TV'   then 1  ELSE 0  end) TV_PACKAGE   FROM (sel * from P0_view.edw_v_fct_subscriber_household_base where subscriber_status_cd ='Active' and billed_customer_id ='-1' and household_id gt;0 and household_base_dt='2021-11-09' ) f right join P0_VIEW.EDW_V_FCT_FIXED_VOUCHER_REDEEMED a on f.CUSTOMER_ID=a.CUSTOMER_ID left join P0_VIEW.EDW_V_DIM_FIXED_VOUCHER b on a.FIXED_VOUCHER_ID = b.FIXED_VOUCHER_ID group by 1,2,3,4,5,6,7,8,9 ) q ;  

Комментарии:

1. В своем » еще » вы считаете 0. Вы хотите использовать либо sum, либо count null. Другими словами, подсчет 10 0s вернет 10.

2. И они Cast('9999-12-31 00:00:00' AS TIMESTAMP FORMAT 'Y4-MM-DDBHH:MI:SS') могут быть переписаны как литеральные метки времени: TIMESTAMP '9999-12-31 00:00:00