2017-10-03 25 views
-1

私はテーブルのABCに2列の列、PINFROM_DATEを持っています。 PINでグループ化したい場合はcount > 1となり、結果セットをFROM_DATE列に設定したい場合もあります。 私は、試してみました選択したステートメントでグループ化し、順序付けします。

SELECT pin, from_date, COUNT(*) AS repetition 
from ABC 
GROUP BY pin 
HAVING COUNT(*) > 1 
ORDER BY from_date; 

上記の文は私に'not a GROUP BY expression'エラーを与えています。 すべてGroup byhavingorder byを入れる方法selectステートメント?

+1

' from_date':pinごとに2つ以上があるときにfrom_date秒のすべてをしたい場合は

SELECT pin, from_date, COUNT(*) AS repetition FROM ABC GROUP BY pin, from_date HAVING COUNT(*) > 1 ORDER BY from_date; 

は、あなたは分析関数を使用することができます無効です。それは 'GROUP BY'節にも存在しなければなりません(あるいは' COUNT() '、' SUM() 'のような集約関数の引数として使われなければなりません)。実際、データベースエンジンは、あなたが投稿したエラーメッセージでも同じことを伝えています。 'pin'と同じ値を持つレコード(同じグループに入っているレコード)は' from_date'の値が異なっていて、 'SELECT'式" from_date "のどの値を指定するのか指定していないので無効です。 。 – axiac

+1

*「カウントが1以上のPINでグループ化したいが、FROM_DATE列に結果セットを作成したい」* - これはあなたが望むものではありません。これは、あなたが望むものを達成するためのSQL方法(kindof)です。 SQLの概念を使用せずに、期待どおりの結果を英語で表現してみてください。あなたが開発者であることを忘れて、ユーザーと考えてください。 – axiac

+0

from_dateをselect句に入れると、結果セットは得られません。私はPINでグループ化したいので、from_date列にグループを配置したい。 – NJMR

答えて

2

をあなただけの最新にしたい場合その後、各pinについてfrom_date

SELECT pin, 
     MAX(from_date) AS from_date, 
     COUNT(*) AS repetition 
FROM ABC 
GROUP BY pin 
HAVING COUNT(*) > 1 
ORDER BY from_date; 

あなたがそれらの2つ以上が存在し、各pinについて各個別from_dateをしたい場合210秒後、: `SELECT`句に

SELECT pin, 
     from_date 
FROM (
    SELECT pin, 
     from_date, 
     COUNT(*) OVER(PARTITION BY pin) AS repetition 
    FROM ABC 
) 
WHERE repetition > 1 
ORDER BY from_date; 
0

試してみてください。

SELECT pin, MAX(from_date), COUNT(*) AS repetition 
from ABC 
GROUP BY pin 
HAVING COUNT(*) > 1 
ORDER BY MAX(from_date); 

それとも

SELECT pin, MIN(from_date), COUNT(*) AS repetition 
from ABC 
GROUP BY pin 
HAVING COUNT(*) > 1 
ORDER BY MIN(from_date); 
+0

答えを編集し、コードを選択し、 '{}'ボタンを使ってコードとしてフォーマットします。あなたが提案する各クエリーをどのように出力するかについても説明してください。 – axiac

0

値を得るためにあなたがそうあなたがサブクエリを使用することができ、集計機能なしの選択列を使用しないと句 することで、グループに記載されていないことができますグループに含まれていない値を必要と結合する

select distinct ABC.pin, ABC.from_date, t.repetition 
from ABC 
inner join ( 
SELECT pin, COUNT(*) AS repetition 
from ABC 
GROUP BY pin 
HAVING COUNT(*) > 1) t on t.pin = ABC.pin 
order by ABC.from_date 
0

非集約あなたのSELECT句の属性:pin, from_dateだけそれらの1(ピン)によってグループ分けされているので、FROM_DATEは、「GROUP BY式ではない」です

考えてみましょう:

SELECT pin, from_date, COUNT(*) AS repetition 
from ABC 
GROUP BY pin, from_date 
HAVING COUNT(*) > 1 
ORDER BY from_date; 
関連する問題