0
votes

Comment puis-je créer cette requête?

J'ai cette requête MySQL ici:

   r.testingFinishedOn_timestamp >= '2019-05-02 00:00:00' 
   AND r.testingFinishedOn_timestamp <= '2019-02-31 00:00:00' 


4 commentaires

Voulez-vous 1) Obtenez les données pendant 12 mois dans une requête? Exécuter 12 requêtes distinctes?


Il y a un bug dans votre requête: vous utilisez <= avec un incorrect incluant inclus inclurant au lieu de << / code> avec une limite supérieure exclusive (donc Vous manquez une journée entière de données!). Vous pouvez également omettre les composants de temps de la brièveté, alors changez votre à ceci: r.testingfineon_timetamp> = '2020-05-01' et r.testingfinishedon_timetamp <'2019-06-01 '.


@Akina, je voudrais 12 tables séparées pour chacun des 12 mois.


Vous pouvez exécuter 12 requêtes différentes itérant sur des mois au code de la clientèle et obtenez 12 lignes distinctes. Vous pouvez utiliser une procédure stockée ou multi-requêtes et obtenir un pack de rangement qui consiste à partir de 12 joints distincts, puis itérer sur eux.


3 Réponses :


1
votes

Vous pouvez essayer la requête ci-dessous - en utilisant last_day () xxx


6 commentaires

@Akina, pouvez-vous vérifier ici - dbfiddle.uk/...


Désolé, ne faisait pas attention avec précision.


@Akina, pas de problèmes - :)


@FAHMI, je cherchais une requête qui produirait 12 tables différentes, 1 pour chaque mois avec les données identiques que celle renvoyée par ma requête ci-dessus.


@Johndoe, j'ai mis à jour la requête Ajout de groupe par année (R.Testingfineon_TimeStamp), mois (R.TestingFineinedon_TimeStamp) - Vous pouvez vérifier maintenant s'il répond à votre exigence ou non.


@Fahmi, je ne sais pas pourquoi cette requête ne génère pas de données exactes comme une requête ci-dessus. Ce groupe Données selon le devgroup_region mais je voudrais que les données soient commandées par mois pour toutes les années / 2019.



1
votes

Essayez ce qui suit:

SELECT
   YEAR(r.testingFinishedOn_timestamp) year,
MONTH(r.testingFinishedOn_timestamp) month,
   COUNT(*) ReleasePerMonth,
   d.name as DevGroup_REGION 
FROM
   release_summary r 
   inner join
      gti_server_info g 
      on r.gti_server_id = g.gti_server_id 
   inner join
      dev_group d 
      on d.dev_group_id = g.dev_group_id 
WHERE
   r.test_type != 14 
GROUP BY
   YEAR(r.testingFinishedOn_timestamp),
   MONTH(r.testingFinishedOn_timestamp),
   d.name
ORDER BY year, month;


4 commentaires

Pourquoi ne pas utiliser les alias dans votre groupe par ?


Hé, cela semble fonctionner, mais cela ne renvoie que pour un seul mois. Je veux cette table produite pour chacun des 12 mois. Cela ne le retourne que pour un seul mois.


Vous ne pouvez pas. Cela lancerait une erreur. Mais vous pouvez mettre votre clause sélectionnée principale dans une sous-requête et définir une colonne nommée de cette façon.


J'ai simplement oublié de ranger votre où la clause . Je l'ai fait maintenant. S'il vous plaît vérifier à nouveau.



1
votes

Une solution possible consiste à interroger des données pour l'ensemble d'une année et de groupe par mois fort> (testfinefine_tmestamp).

J'ai ajouté la requête ci-dessous, mais elle n'est pas testée: p>

SELECT
   MONTH(r.testingFinishedOn_timestamp) ReleaseMonth,
   COUNT(*) ReleasePerMonth,
   d.name as DevGroup_REGION 
FROM
   release_summary r 
   inner join
      gti_server_info g 
      on r.gti_server_id = g.gti_server_id 
   inner join
      dev_group d 
      on d.dev_group_id = g.dev_group_id 
WHERE
   r.testingFinishedOn_timestamp >= '2020-01-01 00:00:00' 
   AND r.testingFinishedOn_timestamp < '2021-01-01 00:00:00' 
   AND r.test_type != 14 
GROUP BY
   d.name, MONTH(r.testingFinishedOn_timestamp);
ORDER BY
  MONTH(r.testingFinishedOn_timestamp), d.name


0 commentaires