2016-07-15 2 views
4

のMAX()私は、実行されたメンテナンスタスクの記録のリストと、実行された日時を格納しています。私は、最新の日付を持つ各タスクのレコードを取り出すためにサブクエリを実行しようとしています。私のSQL文は次のとおりです。ORACLE SQLの

私は次のエラー得続けるしかし
SELECT "ENGINEERING_COMPLIANCE"."EO" AS "EO", 
     "ENGINEERING_COMPLIANCE"."AC" AS "AC", 
     "ENGINEERING_COMPLIANCE"."PN" AS "PN", 
     "ENGINEERING_COMPLIANCE"."PN_SN" AS "PN_SN", 
     "ENGINEERING_COMPLIANCE"."HOURS_RESET" AS "HOURS_RESET", 
     "ENGINEERING_COMPLIANCE"."MINUTES_RESET" AS "MINUTES_RESET", 
     "ENGINEERING_COMPLIANCE"."CYCLES_RESET" AS "CYCLES_RESET", 
     "ENGINEERING_COMPLIANCE"."RESET_DATE" AS "RESET_DATE", 
     "ENGINEERING_COMPLIANCE"."RESET_HOUR" AS "RESET_HOUR", 
     "ENGINEERING_COMPLIANCE"."RESET_MINUTE" AS "RESET_MINUTE", 
     MAX ("ENGINEERING_COMPLIANCE"."RESET_DATE") AS "LAST_COMP_DATE" 
    FROM ENGINEERING_COMPLIANCE 
GROUP BY ("ENGINEERING_COMPLIANCE"."EO") , 
     ("ENGINEERING_COMPLIANCE"."AC") , 
     ("ENGINEERING_COMPLIANCE"."PN") , 
     ("ENGINEERING_COMPLIANCE"."PN_SN") 

:私は "BY GROUP" 削除すると

: "ORA-00979表現BYないGROUPは、" その後、私が手: 「ORA -00937:単一グループグループ機能ではありません "

1 - 正確に何を意味するのですか 2 - ステートメントに間違いがありますか?

+0

https://stackoverflow.com/search?q=[oracle]+not+a+single-group+group+function –

+0

ちょっとしたグーグルで簡単に答えることができる質問の4つのアップup?本当に興味深い動機があります。 – sstan

+0

[ORA-00979の可能な重複は、式によるグループではありません](http://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression) – sstan

答えて

2

GROUP BY列にSELECTのすべての列を置く必要がありますGROUP BY句

それは少し明確にする:
は、この例を見てみましょう:

あなたのSELECT句でTRANSACTIONID、アカウントID、TransactionAmount、TransactionDateを持っている、とあなたはすべての日付にSUM(TransactionAmount)を必要とする、という点で、場合、あなたは

SELECT TransactionDate, TransactionID, AccountID, SUM(TransactionAmount) 
FROM Table 
GROUP BY TransactionDate 

を追加した場合、あなたはエラーになります、なぜ
あなたは20160101に4件の取引があり、各transactionAmountは$ 1000であると想定しているためあなたはアカウントIDとトランザクションIDのようなSELECT句で他の属性を持っている場合 あなたの結果の期待はこの場合、

TransDate  TransAmt 
20140101   4000 

なり、どこに行くのだろうか?このため、GROGES節にすべての属性を含める必要があります。なぜなら、AGGREGATE機能を持つSELECT句を除いて、SELECT句内の属性を含める必要があります。

+0

ありがとうございます - 私はもうエラーは表示されませんが、最新の日付も取得していません。それは私がリストに載せようとしている他の情報か、何か不足していますか?私は "Reset_Date"を取り出しました。これはMAX句にあるものですが、今度はもう一度立ち往生しています。これであなたの助けをありがとう – EMassey

+0

あなたはまだ立ち往生していますか? –

+0

はい私はそうです。私は各項目の最新の日付が必要ですが、すべての日付を取得しています。 : – EMassey

2

は、Oracleには、あなたがによってグループにに記載されているすべての非集計目的球の列を必要とする、しかし、私はすべてでMySQLを知らない

SELECT "ENGINEERING_COMPLIANCE"."EO" AS "EO", 
    "ENGINEERING_COMPLIANCE"."AC" AS "AC", 
    "ENGINEERING_COMPLIANCE"."PN" AS "PN", 
    "ENGINEERING_COMPLIANCE"."PN_SN" AS "PN_SN", 
    "ENGINEERING_COMPLIANCE"."HOURS_RESET" AS "HOURS_RESET", 
    "ENGINEERING_COMPLIANCE"."MINUTES_RESET" AS "MINUTES_RESET", 
    "ENGINEERING_COMPLIANCE"."CYCLES_RESET" AS "CYCLES_RESET", 
    "ENGINEERING_COMPLIANCE"."RESET_DATE" AS "RESET_DATE", 
    "ENGINEERING_COMPLIANCE"."RESET_HOUR" AS "RESET_HOUR", 
    "ENGINEERING_COMPLIANCE"."RESET_MINUTE" AS "RESET_MINUTE", 
    MAX ("ENGINEERING_COMPLIANCE"."RESET_DATE") AS "LAST_COMP_DATE" 
FROM ENGINEERING_COMPLIANCE 
GROUP BY "ENGINEERING_COMPLIANCE"."EO" , 
    "ENGINEERING_COMPLIANCE"."AC" , 
    "ENGINEERING_COMPLIANCE"."PN" , 
    "ENGINEERING_COMPLIANCE"."PN_SN" , 
    "ENGINEERING_COMPLIANCE"."HOURS_RESET" , 
    "ENGINEERING_COMPLIANCE"."MINUTES_RESET" , 
    "ENGINEERING_COMPLIANCE"."CYCLES_RESET" , 
    "ENGINEERING_COMPLIANCE"."RESET_DATE", 
    "ENGINEERING_COMPLIANCE"."RESET_HOUR" , 
    "ENGINEERING_COMPLIANCE"."RESET_MINUTE" 
2

により、グループ内のすべての列を設定する必要がありますリストを選択します。

このような何か作業をする必要があります:

SELECT "engineering_compliance"."eo"    AS "EO", 
     "engineering_compliance"."ac"    AS "AC", 
     "engineering_compliance"."pn"    AS "PN", 
     "engineering_compliance"."pn_sn"   AS "PN_SN", 
     "engineering_compliance"."hours_reset"  AS "HOURS_RESET", 
     "engineering_compliance"."minutes_reset" AS "MINUTES_RESET", 
     "engineering_compliance"."cycles_reset"  AS "CYCLES_RESET", 
     "engineering_compliance"."reset_date"  AS "RESET_DATE", 
     "engineering_compliance"."reset_hour"  AS "RESET_HOUR", 
     "engineering_compliance"."reset_minute"  AS "RESET_MINUTE", 
     Max ("engineering_compliance"."reset_date") AS "LAST_COMP_DATE" 
FROM engineering_compliance 
GROUP BY "engineering_compliance"."eo", 
      "engineering_compliance"."ac", 
      "engineering_compliance"."pn", 
      "engineering_compliance"."pn_sn", 
      "engineering_compliance"."hours_reset", 
      "engineering_compliance"."minutes_reset", 
      "engineering_compliance"."cycles_reset", 
      "engineering_compliance"."reset_date", 
      "engineering_compliance"."reset_hour", 
      "engineering_compliance"."reset_minute"; 
2

あなたは今まであなたがあるべき集約関数なしでSELECT句に追加