J'ai actuellement une requête fusionnant deux tables pour en créer une nouvelle pour l'analyse. Après avoir obtenu des résultats amusants en essayant de le représenter pour la présentation, j'ai appris que certaines de ces données n'étaient jamais nettoyées. J'ai été en mesure d'identifier les données à l'origine des problèmes et, pour le temps, je voudrais les exclure de la requête afin que je puisse aller de l'avant avec l'analyse.SQL exclut les lignes correspondant à tous les critères
Ces données faux correspond à tous ces critères:
- rate_type = standard
- client_net_cleared = 0 programme
- est vide (non nul)
j'ai identifié ces derniers dans SELECT avec CASE, mais je me suis rendu compte que pour en faire un usage, je devrais faire une autre table en interrogeant tout ce qui est dans ce document moins ce qui est identifié comme répondant aux critères ci-dessus basés sur l'état CASE NT. Il doit y avoir une meilleure solution que cela.
Je suis actuellement en train d'essayer d'exclure ceux-ci dans le cadre de l'instruction WHERE, mais j'ai lu d'autres sujets de questions et trouvé O WH n'est pas très bon pour gérer plusieurs sous-conditions.
Ce que j'ai:
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
ensemble de données de l'échantillon:
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
Ce que je dois:
Ne comptez pas les lignes correspondant à trois critères: rate_type = standard , client_net_cleared = 0, le programme est bl ank (pas nul).
u essayé le at table imbriquée, comme la suivante: - 'select * from ( - Mettez votre requête ici ) où un rate_type = Standard and client_net_cleared = 0 et le programme ne sont pas null' –
Vous pouvez 't grouper par position ordinale (au moins pas dans sql-server). Et si vous pouvez mysql c'est une habitude que vous devriez arrêter immédiatement si pas plus tôt. –
Surtout lorsque vous utilisez 'SELECT *'. Cela le rend dépendant de l'ordre des colonnes dans l'instruction 'CREATE TABLE'. J'ai le sentiment qu'il est en train de se grouper par toutes les colonnes, donc ça devrait juste être "SELECT DISTINCT *". – Barmar