sql >> データベース >  >> RDS >> PostgreSQL

SqlAlchemyでdistincton(Postgres)を使用する正しい方法は何ですか?

    あなたが求めているのは、 DISTINCT ON ... ORDER BY 結果( N =1 )。したがって、グループ化して集約するのではなく、

    event_list = Table.query.\
        distinct(Table.name).\
        filter_by(**filter_by_query).\
        filter(*queries).\
        order_by(Table.name, Table.timestamp.desc()).\
        all()
    

    これにより、タイムスタンプ値が最大の、名前で「グループ化」された行が選択されることになります。

    手動のアドホッククエリを実行している場合を除き、アプリケーションコードではなく、ほとんどの場合アスタリスクを使用したくありません。アスタリスクは基本的に「FROMのすべての列」です。 table / Relation」。列を追加したり、列を並べ替えたりすると、後で仮定が破られる可能性があります。

    最終結果のタイムスタンプに基づいて結果の行を並べ替える場合は、たとえば Query.from_self() クエリをサブクエリに変換し、囲んでいるクエリで順序付けするには:

    event_list = Table.query.\
        distinct(Table.name).\
        filter_by(**filter_by_query).\
        filter(*queries).\
        order_by(Table.name, Table.timestamp.desc()).\
        from_self().\
        order_by(Table.timestamp.desc()).\
        all()
    



    1. MySQLと同じ方法でPHPの文字列を比較する

    2. MYSQL Workbench-エラー:エラー1215:外部キー制約を追加できません

    3. SQLiteでの日付による全順序の実行

    4. MySQLのユーザーにデータを入力するさまざまな方法