SQL excluye las filas de registros que especifican varias condiciones

En un análisis de datos reciente, utilicé una consulta de enlace en dos tablas para devolver los datos que necesitaba. En el proceso de uso, descubrí que contiene algunos datos sucios, que deben borrarse mediante algunos métodos. Localicé las características de estos datos y luego las agregué a las condiciones de consulta, con la esperanza de excluir los registros que cumplen estas condiciones a través del script de consulta.

Estos datos erróneos tienen las siguientes características:

  • rate_type = Estándar
  • client_net_cleared = 0
  • el programa está en blanco (no nulo)

Al principio, utilicé el siguiente método y luego lo agregué a la parte where, pero esto no cumplió con la demanda:

 

SELECT *
, CASE WHEN tad.rate_type = 'Standard'
    AND tad.client_net_cleared = '0'
    AND program= '' THEN 1
    ELSE '0'
    END AS noise

FROM tableau.km_tv_ad_data_import tad
JOIN tableau.km_tv_ad_report ga
    ON ga.session_timestamp >= tad.timestamp - INTERVAL '4 minute'
    AND ga.session_timestamp <= tad.timestamp + INTERVAL '5 minute'
    AND ga.session_timestamp != tad.timestamp

WHERE tad.timestamp >= '2016-09-01'
AND (tad.rate_type != 'Standard'
    AND tad.client_net_cleared != '0'
    AND tad.program != '')

GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21

 

 timestamp           | rate_type | program         | client_net_cleared | noise
---------------------|-----------|-----------------|--------------------|-------
 2016-11-01 18:00:00 | Standard  | Diving          |                 50 | 0
 2016-12-01 21:00:00 | Holiday   | Classic Albums  |                100 | 0
 2016-11-01 09:00:00 | FireSale  | Panorama        |                  0 | 0
 2016-10-01 12:00:00 | Standard  |                 |                  0 | 1
 2016-12-01 15:00:00 | Holiday   | MythBusters     |                100 | 0
 2016-10-01 13:00:00 | FireSale  | House           |                200 | 0

Lo último que necesito es
excluir los registros que cumplan todas las siguientes condiciones:
rate_type = Standard, client_net_cleared = 0, el programa está en blanco (no nulo).

Después de la revisión, la forma correcta es:

AND NOT (tad.rate_type = 'Standard'
        AND tad.client_net_cleared = '0'
        AND tad.program = '')

De esta manera, se logra el objetivo requerido.De hecho, el enfoque de esta pregunta todavía está en la base de SQL, y comprender realmente la lógica de cálculo de AND y OR.

Supongo que te gusta

Origin blog.csdn.net/londa/article/details/108666238
Recomendado
Clasificación