Pour une database contenant plusieurs lignes par adresse e-mail, je souhaite regrouper chaque adresse e-mail en prenant les informations les plus récentes pour chaque adresse e-mail.
Email Col1 Col2 Col3 Col4 CustomerID ======= ==== ==== ==== ==== ========== [email protected] aaa null 1 [email protected] null bb null 2 [email protected] null null c null 3
Je veux prendre la valeur non nulle avec le CustomerID
le plus élevé. Pour ci-dessus, je m'attendrais à:
Email Col1 Col2 Col3 Col4 ======= ==== ==== ==== ==== [email protected] abc null
Je peux faire un GROUP BY
, en prenant le MAX
pour chaque colonne, mais c'est simplement la valeur la plus élevée par ordre alphabétique, et ne prend pas en count le CustomerID
.
SQL Fiddle
SELECT EmailAddress, MAX(FirstName), MAX(LastName), MAX(Gender), MAX(Birthday), MAX(Country) FROM CustomerInfo GROUP BY EmailAddress
En outre, cela est programmé dans Exact Target, ce qui signifie que certains mots-keys SQL ne sont pas pris en charge , notamment les variables, les tables temporaires et les sliders ne sont pas pris en charge.
Compte tenu de ces ressortingctions, est-il possible d'get les résultats souhaités?
Si je comprends bien votre question, je pense que vous devrez vous joindre à la table plusieurs fois. Quelque chose comme ceci devrait fonctionner en utilisant une common table expression
pour get l'id de client max
pour chaque colonne où la colonne n'est pas null
. Ensuite, il se rejoint à lui-même pour get la valeur:
with cte as ( select email, max(case when col1 is not null then customerid end) maxcustomerid1, max(case when col2 is not null then customerid end) maxcustomerid2, max(case when col3 is not null then customerid end) maxcustomerid3, max(case when col4 is not null then customerid end) maxcustomerid4 from yourtable group by email ) select t.email, t1.col1, t2.col2, t3.col3, t4.col4 from cte t left join yourtable t1 on t.email = t1.email and t.maxcustomerid1 = t1.customerid left join yourtable t2 on t.email = t2.email and t.maxcustomerid2 = t2.customerid left join yourtable t3 on t.email = t3.email and t.maxcustomerid3 = t3.customerid left join yourtable t4 on t.email = t4.email and t.maxcustomerid4 = t4.customerid