2016-04-20 8 views
0

Ich bin neu in SQL und kämpfe mit einem Fall. Ich mag den Fall machen, wo, wenn ein Konto (ACCOUNT_ID) keinen Datensatz (ON BILLING_ID) zwischen current_date-302 und current_date-62 THEN-Marke mit einer "1"Fall SQL Wenn es keinen Datensatz zwischen Daten gibt

Abfrage unten hat:

Vielen Dank im Voraus

SELECT 
    billing_date_local_time 
    ,account_id 
    ,contract_owner_name 
    ,date_first_feature_partner 
    ,deal_starts_at 
    ,contract_id 
    ,new_partner_type 
    ,sum(voucher_sold) AS Vouchers 
    ,sum(gross_bookings_local) AS GB 
    ,sum(gross_revenue_local) AS GR 
    ,is_G2 
    ,Case when billing_date_local_time between current_date-302 and current_date-62 = 0 THEN 'YES' ELSE 'NO' End 
FROM EMEA_ANALYTICS.eu_deal_flat 
WHERE 
     country_id = 206 
    and billing_date_local_time between current_date-400 
    and current_date-2 

GROUP BY 1,2,3,4,5,6,10,11 
+1

die = 0 nach current_date-62 entfernen. Das löst dein Problem. –

+0

was genau meinst du mit * markiere es mit einer "1" *? – Bohemian

Antwort

0

Sie benötigen eine korrelierte Unterabfrage zu tun; so etwas wie dieses:

select 
a.billing_date_local_time 
,a.account_id 
,... 
, CASE WHEN EXISTS (SELECT * FROM EMEA_ANALYTICS.eu_deal_flat b WHERE a.account_id = b.account_id AND b.billing_date_local_time between current_date-302 and current_date-62) THEN 'YES' ELSE 'NO' END 
from 
FROM EMEA_ANALYTICS.eu_deal_flat a 
WHERE ... 
+0

Danke - aber wenn ich die Abfrage wie vorgeschlagen aktualisieren, bekomme ich einen Fehler select-failed 3771 ungültiger Ausdruck in wann Klausel des Fallausdrucks - irgendwelche Ideen? –

+0

Im Verwenden von Teradata, wenn das einen Unterschied macht. –

0

Sie benötigen eine Aggregatfunktion wie folgt anzuwenden:

min(case when billing_date_local_time 
       between current_date-302 and current_date-62 
     then 0 
     else 1 
    end) 
Verwandte Themen