0
votes

SQL Server: Groupe par erreur "Colonne non valide" Erreur, comment résoudre ce problème?

J'essaie de filtrer cg_group code> noms (veuillez consulter la requête) et groupe (en utilisant: groupe par code>) les résultats suivants de la dernière opportunité mise à jour (en utilisant: Commander par opportunités.date_modified Desc code>).

Lorsque j'ai utilisé la requête sans utiliser de groupe par IT renvoie les résultats suivants: p>

SELECT cg_groups.name
FROM cg_groups
JOIN cg_groups_cstm ON cg_groups_cstm.id_c = cg_groups.id
JOIN accounts_cstm ON cg_groups.name = accounts_cstm.client_group_c
JOIN accounts ON accounts.id = accounts_cstm.id_c
JOIN accounts_opportunities ON accounts.id = accounts_opportunities.account_id
JOIN opportunities ON accounts_opportunities.opportunity_id = opportunities.id
WHERE cg_groups.deleted='0' AND cg_groups_cstm.status_c='1' AND opportunities.deleted='0' 
GROUP BY cg_groups.name
ORDER BY opportunities.date_modified DESC


2 commentaires

Vous ne pouvez pas commander par une valeur que vous n'êtes pas grouper par . Tout comme vous ne pouvez pas le sélectionner. Vous auriez besoin de l'agréger par E.G. min (date_modifié) mais ce n'est peut-être pas le comportement que vous recherchez.


Si "ABC Group" contenait deux lignes avec des dates = janvier 1 et 1 février avant le regroupement, lequel souhaitez-vous considérer dans l'ordre?


3 Réponses :


0
votes

Mettez opportunités.date_modified code> dans la sélection et le groupe par alors que vous pouvez l'utiliser dans la commande par xxx pré>

mais pour votre résultat, vous pouvez essayer ci-dessous, il suffit d'utiliser simplement distinct P>

SELECT distinct cg_groups.name
FROM cg_groups
JOIN cg_groups_cstm ON cg_groups_cstm.id_c = cg_groups.id
JOIN accounts_cstm ON cg_groups.name = accounts_cstm.client_group_c
JOIN accounts ON accounts.id = accounts_cstm.id_c
JOIN accounts_opportunities ON accounts.id = accounts_opportunities.account_id
JOIN opportunities ON accounts_opportunities.opportunity_id = opportunities.id
WHERE cg_groups.deleted='0' AND cg_groups_cstm.status_c='1' AND opportunities.deleted='0'
order by cg_groups.name


2 commentaires

@Daleburrell oui vous avez raison 1ère réponse pour erreur 2e est pour le résultat souhaité BTW merci


Votre deuxième requête ne fait pas de commande du tout. Êtes-vous sûr que c'est ce que veut l'OP?



0
votes

Utiliser Row_Number code> Pour trouver le dernier enregistrement mis à jour pour chaque groupe:

WITH cte AS (
    SELECT cg_groups.name, o.date_modified,
        ROW_NUMBER() OVER (PARTITION BY o.date_modified DESC) rn
    FROM cg_groups cg
    INNER JOIN cg_groups_cstm cgc
        ON cgc.id_c = cg.id
    INNER JOIN accounts_cstm ac
       ON cg.name = ac.client_group_c
    INNER JOIN accounts a
       ON a.id = ac.id_c
    INNER JOIN accounts_opportunities ao
        ON a.id = ao.account_id
    INNER JOIN opportunities o
        ON ao.opportunity_id = o.id
    WHERE cg.deleted = '0' AND cgc.status_c = '1' AND o.deleted = '0'
)

SELECT name
FROM cte
WHERE rn = 1
ORDER BY date_modified DESC;


0 commentaires

0
votes

Que diriez-vous d'ajouter simplement distinct juste après votre Sélectionnez Déclaration. XXX


0 commentaires