5

column の個別の値ごとに 1 つの行を選択したいと考えています。ここで私はそれを実行したいcol1

| ID | COL1 | COL2 |
--------------------
|  1 |    0 |    0 |
|  2 |    0 |    1 |
|  3 |    1 |   11 |
|  4 |    1 |   12 |
|  5 |    1 |   16 |

結果は次のとおりです。

| ID | COL1 | COL2 |
--------------------
|  1 |    0 |    0 |
|  3 |    1 |   11 |

とは01異なる値でしcol1た。列の個別の値が返される限り、どの行が返されるかについて厳密ではありません (たとえば、id の最小値は必要ありません)。

TestModelモデルが呼び出され、すべてが完全にマップされていると仮定してください。

4

3 に答える 3

6

そのためには、サブクエリを使用する必要があります。また、選択MINまたはMAX機能する必要があります。

SELECT * FROM TestModel
WHERE ID IN(SELECT MIN(id) 
            FROM TestModel 
            GROUP BY col1)

出力:

| ID | COL1 | COL2 |
--------------------
|  1 |    0 |    0 |
|  3 |    1 |   11 |

このSQLFiddleを参照してください


ソリューションの SA バージョン:

subq = (session.query(func.min(TestModel.id).label("min_id")).
        group_by(TestModel.col1)).subquery()

qry = (session.query(TestModel).
       join(subq, and_(TestModel.id == subq.c.min_id)))
于 2012-11-20T07:08:59.590 に答える
3

これは、SQL のクエリと同様に、列TestModelの個別の値ごとにオブジェクトを返します。TestModel.col1GROUP BY

session.query( TestModel).group_by( TestModel.col1).all()
于 2012-11-21T11:00:38.553 に答える