Maison  >  Questions et réponses  >  le corps du texte

SQLAlchemy : obtenir la valeur maximale des valeurs groupées

<p>J'ai ce tableau dans mon application Flask : </p> <pre class="brush:php;toolbar:false;">événements de classe (db.Model) : id = db.Column(db.Integer, Primary_key=True, autoincrement=True) timestamp_event = db.Column(db.DateTime, nullable=False)</pre> <p>J'ai besoin d'obtenir le jour avec le plus d'enregistrements, y compris la valeur et la date elle-même dans un format imprimable (par exemple j/m/a). J'ai essayé le code suivant : </p> <pre class="brush:php;toolbar:false;">daily_max = db.func.max(db.session.query(db.func.count(Events.id), db.func.date_format(Events.timestamp_event,'%d/%m/%y')) .group_by(db.func.date_format(Events.timestamp_event,'%Y%M%D')))</pre> <p>Ensuite, nous espérons que daily_max[0] a une valeur et daily_max[1] n'a pas la date hh:mm:ss. </p> <p>Lorsque j'imprime daily_max après la requête, la valeur est : </p> <pre class="brush:php;toolbar:false;">daily_max = max((SELECT count(events.id) AS count_1, date_format(events.timestamp_event, :date_format_2) AS date_format_1 FROM événements GROUP BY date_format(events.timestamp_event, :date_format_3)))</pre> <p> Ceci est un échantillon des données. La réponse (la valeur de <code>daily_max</code>) doit être <strong>(3, "21/01/2022")</strong> : </p> <pre class="brush:php;toolbar:false;">id timestamp_event ---- --------------- 1 2022-01-15 12:34 2 2022-01-21 01:23 3 2022-01-21 05:33 4 2022-01-21 11:11 5 2022-01-23 00:01 6 2022-01-23 23:29</pré> <p>Des indices sur ce que je fais de mal ? Je ne trouve pas la réponse dans la documentation. </p>
P粉738346380P粉738346380415 Il y a quelques jours433

répondre à tous(1)je répondrai

  • P粉541565322

    P粉5415653222023-09-02 00:35:55

    C'est une mauvaise approche (inefficace) :

    daily_max = db.session.query(db.func.count(Events.id),
                db.func.date_format(Events.timestamp_event,'%d/%m/%y'))\
                .group_by(db.func.date_format(Events.timestamp_event,'%Y%M%D'))\
                .order_by(db.func.count(Events.id).desc()).first()

    Il regroupe toutes les paires (nombre d'identifiants, date), trie les paires dans l'ordre inverse du nombre et obtient la première paire.

    Il fait le travail, mais j'aimerais vraiment connaître une manière efficace et élégante d'utiliser func.max().

    répondre
    0
  • Annulerrépondre