2

テーブルがあるとします:

create table EVENT("id" number, "date" DATE, "value" number);

選択した各IDがN回以上発生したすべての行を取得したい。だから:

    ID | 日付 | 価値
   --------------------------
    1 | 2011-01-01 | 100
    1 | 2011-01-02 | 200
    2 | 2011-01-05 | 300
    2 | 2011-03-15 | 800
    3 | 2011-02-01 | 400
    4 | 2011-01-01 | 500
    4 | 2011-04-21 | 600
    4 | 2011-01-01 | 700

N == 2 id=3を除くすべての行を取得し、N == 3 の場合はid=4の行のみを取得します ...

私はOracleを使用していますが、このタイプのクエリにはSQLの新しい知識が必要なようです...

4

7 に答える 7

6
SELECT "id",
       "date",
       "value"
FROM   (SELECT EVENT.*,
               COUNT(*) OVER (PARTITION BY "id") AS CNT
        FROM   EVENT)
WHERE  CNT >= 3 

SQL フィドル

于 2013-06-20T12:24:23.423 に答える
1

どうぞ:

SELECT *
FROM tmp
WHERE id IN (SELECT id FROM tmp GROUP BY id 
             HAVING COUNT(*) > N)

N条件が示すように値を更新します。

SQL フィドルのデモ

于 2013-06-20T12:29:11.223 に答える
1
SELECT * FROM Event
INNER JOIN (
    SELECT id, COUNT(*) AS Cnt FROM Event GROUP BY id
) AS C ON Event.id = C.id
WHERE C.Cnt >= 3
于 2013-06-20T12:29:48.137 に答える
0
SELECT *
FROM   EVENT
GROUP  BY "id"
HAVING ( COUNT("id") > N - 1
         AND COUNT("id") < N + 1 ); 
于 2013-06-20T12:35:18.570 に答える