SQLAlchemy: グループ化された値の最大値を取得する
P粉738346380
P粉738346380 2023-09-01 12:07:40
0
1
514
<p>Flask アプリには次のテーブルがあります: </p> <pre class="brush:php;toolbar:false;">クラスイベント(db.Model): id = db.Column(db.Integer、primary_key=True、autoincrement=True) timestamp_event = db.Column(db.DateTime, nullable=False)</pre> <p>印刷可能な形式 (例: d/m/y) で値と日付自体を含むレコードが最も多い日を取得する必要があります。次のコードを試してみました: </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>次に、daily_max[0] に値があり、daily_max[1] に hh:mm:ss の日付が含まれていないことを望みます。 </p> <p>クエリの後に daily_max を出力すると、値は次のようになります: </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 イベント GROUP BY date_format(events.timestamp_event, :date_format_3)))</pre> <p>これはデータのサンプルです。答え (<code>daily_max</code> の値) は <strong>(3, "21/01/2022")</strong>: </p> となるはずです。 <pre class="brush:php;toolbar:false;">id timestamp_even ---- --------------- 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</pre> <p>私が間違っていることについて何か手がかりはありますか?ドキュメントに答えが見つかりません。 </p>
P粉738346380
P粉738346380

全員に返信(1)
P粉541565322

これは悪い (非効率な) アプローチです:

リーリー

すべての (id count, date) ペアをグループ化し、カウントの逆順にペアを並べ替えて、最初のペアを取得します。

これで仕事は完了しますが、func.max() を使用する効率的でエレガントな方法を知りたいと思っています。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート