0

次のようなテーブルがあります。

id | group | title | description | added | modified
---------------------------------------------------
1  |   1   |  ...  |     ...     |  ...  |   ...
2  |   1   |  ...  |     ...     |  ...  |   ...
3  |   2   |  ...  |     ...     |  ...  |   ...
4  |   2   |  ...  |     ...     |  ...  |   ...
5  |   3   |  ...  |     ...     |  ...  |   ...

ここで、すべてのグループ値の最初の行を選択する必要があります。ここでは、DISTINCT キーワードを使用するのが正しい方向だと思います。しかし、使用:

SELECT DISTINCT group FROM table;

明らかに、グループ値のみを返しますが、残りのフィールドは返しません。

group
-----
  1
  2
  3

これを達成する方法を知っている人はいますか?

私が探しているのは - 上記の例に関して - この種の出力です:

id | group | title | description | added | modified
---------------------------------------------------
1  |   1   |  ...  |     ...     |  ...  |   ...
3  |   2   |  ...  |     ...     |  ...  |   ...
5  |   3   |  ...  |     ...     |  ...  |   ...

前もって感謝します!!

4

3 に答える 3

2

次のようなものを使用できます。

SELECT "id", "group", "title", "description", "added", "modified"
FROM (
  SELECT *,ROW_NUMBER() OVER (PARTITION BY "group" ORDER BY "id") rn
  FROM Table1
) this_could_be_called_anything
WHERE rn=1;

でテストする SQLfiddle

于 2013-07-17T17:38:33.423 に答える
0

これを試してください:

    select t.*
      from table t
inner join (
                select min(te.id)   id_pivot
                     , te.grp
                  from table te
              group by te.grp 
           ) tg
        on tg.id_pivot = t.id
         ;
于 2013-07-17T17:39:27.600 に答える
0
SELECT mk.* FROM meuk mk
JOIN ( SELECT zgroup, MIN(id) AS id
        FROM meuk
        GROUP BY zgroup
        ) agg ON agg.id = mk.id
        ;

またはこれ:

SELECT * FROM meuk mk
WHERE NOT EXISTS ( SELECT  *
        FROM meuk nx
        WHERE nx.zgroup = mk.zgroup
        AND nx.id < mk.id
        )
        ;
于 2013-07-17T17:39:34.463 に答える