SQLAlchemy : obtenir la valeur maximale des valeurs groupées
P粉738346380
2023-09-01 12:07:40
<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>
C'est une mauvaise approche (inefficace) :
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().