0
votes

Compte cumulé par semaine

Actuellement, j'utilise MySQL - mais migrer vers SQL Server bientôt - alors les deux sont pour la solution ok!

J'ai un schéma de base de données comme (candidat de table): p>

| KW        | counts          | cumulated   |
+-----------+-----------------+-------------+
| 1         |  2              |  2          |
| 2         | 19              | 21          |
| 3         | 18              | 39          |
| 4         | 21              | 60          |


7 commentaires

MySQL ou SQL Server? Vous avez marqué les deux?


J'utilise MySQL en ce moment - mais migrez dans les prochaines semaines vers SQL Server - donc les deux sont pour la solution d'accord


Actuellement, j'utilise MySQL quelle version? Ceci est critique pour votre question.


... et fournir un échantillon de violon (et montrer le résultat souhaité pour les données de violon, non abstrait).


Désolé - c'est la version 5.7.21


La somme cumulative de cette version MySQL est implémentée en utilisant 2 copies de table ou à l'aide de variables définies par l'utilisateur. Les deux méthodes doivent être entièrement réécrites lors de l'utilisation de SQL Server où somme () sur () existe. Si vous migrez à SQL Server - Mettez à jour votre version MySQL à la dernière version (8.0.19).


Ps. Votre requête ne contient pas de commande par clause - la commande d'enregistrements n'est donc pas spécifiée, donc «la somme cumulative» n'a aucun sens.


4 Réponses :


0
votes

Vous pouvez essayer ceci dans SQL Server: xxx

sortie: xxx


0 commentaires

0
votes

Je pense que cela devrait fonctionner. Je ne sais pas si c'est le plus efficace.

    SELECT WEEK(intern)+1 as KW, count(intern) as counts into #tempCount
    from epunkt_sourcing.candidate
    WHERE WEEK(intern) IS NOT NULL AND YEAR(intern) = 2020
    GROUP BY WEEK(intern)

    select
     a.kw
    ,a.counts
    ,sum(b.counts) as cumulated

    from #tempCount a
    inner join #tempCount b on a.kw >= b.kw

    group by a.kw, a.counts
    order by a.kw


0 commentaires

0
votes

Veuillez essayer la requête ci-dessous, espérons que cela aidera:

SELECT t.KW, t.counts, @cum_total:=@cum_total + t.counts AS cumulative_sum
    FROM
        ( 
            SELECT WEEK(intern)+1 as KW, count(intern) as counts
                FROM epunkt_sourcing.candidate
            WHERE WEEK(intern) IS NOT NULL AND YEAR(intern) = 2020
            GROUP BY WEEK(intern)
        ) AS t
    JOIN (SELECT @cum_total:=0) r;


0 commentaires

0
votes

Dans MySQL et SQL Server, vous devriez utiliser des sommes cumulatives. La version MySQL est la suivante: xxx

dans SQL Server, vous utiliserez: xxx

notes:

  • La première semaine pourrait être une semaine partielle, en fonction de l'année. Les semaines commencent le lundi, mais des années peuvent commencer à n'importe quelle date.
  • La comparaison de l'année utilise les inégalités de date. Ceci est recommandé dans les deux bases de données.
  • Les fonctions de la pièce Date diffèrent entre les bases de données.
  • SQL Server n'autorise pas les alias de colonne dans le groupe par .
  • Les deux bases de données prennent en charge les fonctions de la fenêtre. MySQL prend en charge les variables mais elles sont maintenant obsolètes. Vous ne devez donc pas les utiliser.

0 commentaires