0

date_time以下の表から最小値を決定するためのクエリを作成するのを手伝ってください:

 ID  |  Name  |  Date_Time | Location
---------------------------------------
 001 |  John  | 01/01/2015 |   901
 001 |  john  | 02/01/2015 |   903
 001 |  john  | 05/01/2015 |   905
 001 |  john  | 06/01/2015 |   904
 002 |  Jack  | 01/01/2015 |   903
 002 |  Jack  | 03/01/2015 |   904
 002 |  Jack  | 04/01/2015 |   905
 003 |  Sam   | 01/01/2015 |   904
 003 |  Sam   | 03/01/2015 |   903
 003 |  Sam   | 04/01/2015 |   901
 003 |  Sam   | 06/01/2015 |   903

私はこのクエリを試しました:

SELECT ID, NAME, MIN(DATE_TIME), LOCATION
  FROM TABLE
 GROUP BY (ID)

しかし、私はこのエラーメッセージを受け取りました:

ORA-00979: not a GROUP BY expression
4

4 に答える 4

1

集計関数を使用する場合は、集計を適用するフィールドを指定する必要があります。したがって、group by 句を使用しています。この場合、ID と名前の組み合わせごとに最小の date_time を見つけることを意味している可能性があります。

 select id, name, min(date_time) 
              from my_table group by id, name
于 2015-06-16T11:04:59.347 に答える
1

何かをグループ化すると、他のすべての行はそのグループ化されたキーにクラスター化されたままになります。キーの場合、 の行 (エンティティ) の 1 つだけを取得できますSELECT

近道は、今までに何GROUP BYSELECT自由にできる。それ以外の場合は、関数で囲む必要がありAGGREGATEます。

IDでグループ化すると、

001key には 4 つの行がクラスター化されています。 でグループ化されていない列を指定するとどうなるか考えてみてくださいSELECTMIN(date)一方、4 つの日付のうち ..を使用すると、少なくとも 1 つの日付が取得されます。

したがって、クエリは

SELECT ID,MIN(NAME),MIN(LOCATION),MIN(DATE)
FROM TABLE
GROUP BY ID

また

SELECT ID,LOCATION,NAME,MIN(DATE)
FROM TABLE
GROUP BY ID,LOCATION,NAME

また

分析的アプローチ。

SELECT ID,LOCATION,DATE,MIN(DATE) OVER(PARTITION BY ID ORDER BY NULL) AS MIN_DATE
FROM TABLE.

それでも、クエリをどのように書き直さなければならないかについては、要件次第です。

編集:最小日付に対応する行をフェッチするには、以下のような SELF JOIN を作成できます。

SELECT T.ID,T.NAME,T.LOCATION,MIN_DATE
FROM
 (
   SELECT ID,MIN(DATE) AS MIN_DATE
   FROM TABLE T1
   GROUP BY ID
 ) AGG, TABLE T
 WHERE T.ID = AGG.ID
 AND T.DATE = AGG.MIN_DATE

また

SELECT ID,NAME,LOCATION,MIN_DATE
FROM
( 
  SELECT ID,
         NAME,
         LOCATION,
         MIN(DATE) OVER(PARTITION BY ID ORDER BY NULL) MIN_DATE,
         ROW_NUMBER() OVER(PARTITION BY ID ORDER BY NULL) RNK
  FROM TABLE
)
WHERE RNK = 1;
于 2015-06-16T11:08:32.227 に答える
0

他のすべての列をグループ化してみてください...テーブルの名前が「テーブル」の場合は、テーブル名をスキーマ内の別の名前に変更してみてください。

SELECT ID , NAME , MIN(DATE_TIME) , LOCATION FROM TABLE  GROUP BY ID, Name, Location
于 2015-06-16T11:05:25.277 に答える