0
votes

MySQL Afficher les enregistrements Mois sages

J'ai des enregistrements dans ma table de base de données.

L'utilisateur passe le début et la date de fin, puis attend une sortie. Si un utilisateur passe la date de début et de fin pour le même mois, il ne doit afficher qu'un seul enregistrement, mais si la date de fin est prolongée d'un mois ou plus, il doit afficher un enregistrement WISE WISE. P>

Pour l'instant, je suis capable de collecter des données totales tout en suivant cette requête. P>

Data_Date_Time      == total_kwh == Customer_ID == MSN
2020-04-01 11:44:13 || 50000     || 37010114707 || 7898985212
2020-05-01 10:25:05 || 45585     || 37010114707 || 7898985212


1 commentaires

Sans groupe par clause, et avec la somme () agrégée dans la liste Select, la requête ne reviendra pas plus d'une ligne. (Si sql_mode comprend uniquement_full_group_by, alors mySQL retournera une erreur pour cette requête, un comportement plus cohérent avec la norme et la plupart des autres RDBMS oracle, SQL Server, Teradata, et al. Une extension spécifique MySQL permet à la requête de retourner des lignes, mais les valeurs renvoyées Pour les expressions non agrégates dans la liste Select (Cust_ID, MSN) sont indéterminée . Les valeurs seront renvoyées d'une certaine ligne dans le groupe effondré, mais aucune garantie quelle ligne.)


3 Réponses :


0
votes

Sélectionnez m. data_date_time comme 'data_date_time', somme (m. kWh ) comme total_kwh, m. cust_id comme "Customer_id", m. msn comme msn, date_format (data_date_time, "% y-% m") en tant que monyear De mdc_meters_data m où m. data_date_time> = = 2020-04-01 00:00:00 'et m. data_date_time` <=' 2020-05-31 00:00:00 'Groupe par Monyear

J'espère que cela vous aidera à avoir une idée


2 commentaires

La requête ne renvoie pas le résultat correct. Quand j'ai essayé de passer la date de la date de m.data_date_time> = '2020-04-01 00:00:00' et m.data_date_time <= '2020-05-31 00:00:00' La somme est 401320 pour 2020-04-01 et 84220 pour 2020-05-31 mais quand je passe L'heure de date m.data_date_time> = '2020-04-01 00:00:00' et m.data_date_time <= '2020-04-30 00:00:00' La somme est 370570 . Pourquoi est-ce ?


Voulez-vous s'il vous plaît mettez votre table



0
votes

Veuillez vérifier cette réponse

    SELECT m.`data_date_time` AS 'Data_Date_Time', SUM(m.`kwh`) AS total_kwh, m.`cust_id` AS 'Customer_ID', m.`msn` AS MSN 
FROM table AS r JOIN (
        SELECT MAX(m.`data_date_time`) AS data_date_time
        FROM table AS t
        GROUP BY YEAR(m.`data_date_time`), MONTH(t.data_date_time)
    ) AS x USING (data_date_time)

`mdc_meters_data` m WHERE m.`data_date_time`>='2020-04-01 00:00:00' AND m.`data_date_time`<='2020-05-31 00:00:00'


1 commentaires

ça me donne une erreur. Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à la version de votre serveur Mariadb pour la bonne syntaxe à utiliser à proximité de «Tableau comme r Joindre



0
votes

Vous devrez utiliser groupe par la bonne manière. xxx

Le problème avec la requête ci-dessus est que vous n'avez pas besoin de grouper vos résultats par msn

une solution de contournement est à utiliser Any_Value Fonction autour de votre MSN MSN de la liste Select. Cela ne choisira que n'importe quelle valeur msn dans la liste correspondante et assurez-vous que vous n'aurez toujours que 2 entrées affichées dans les résultats. xxx

aussi, Notez la manière dont le 31 de mai a été inclus dans votre requête en donnant en prolongeant la plage à l'heure 23:59:59.


4 commentaires

Paramètres incorrects dans l'appel à la fonction stockée 'Any_Value' C'est ce que cela me donne cette erreur


Réponse modifiée. Vous auriez dû réaliser comment le faire fonctionner de toute façon.


Maintenant, il me donne MDC_DB.ANY_Value n'existe pas


Any_Value est une fonction MySQL standard. Si votre serveur ne peut pas le trouver, vous avez un problème sur votre serveur. ripttuly.com/mysql/example/26731/any-value--