2017-07-11 1 views
1

私は、Postgresの中に約14,000行のテーブルを持っています。私は何年にも存在するが、他のものには存在しない価値に気づいています。今、私は2017年、2016年、2015年、2014年などのこれらの特定の列の値を数えます。私は、自分自身が2016年と2017年にのみ価値を選択することを容易にしたいが、それ以外の年には価値を選択したくない。すべての年に表示されない値を見つけるにはどうすればよいですか?

例:タイプと説明として「13HAZ02」、「ハウスキーピング」が2016年と2017年に見つかりました。

これは私が期待してい方法です:

select type, descr, count(*) as count 
from (
select * 
from table  
where date >= '2016-01-01' and date <= '2016-12-31' 
) as a 
group by type, descr 
order by count desc 

私はどこを追加しているではないが、私はそれを正しく使用していませんよ。私はこのエラーを受け取ります:日時フィールドの値が範囲外です。

select type, descr, count(*) as count 
from (
select * 
from table  
where date >= '2016-01-01' and date <= '2016-12-31' 
) as a 
where not date > '2015-12-31' 
group by type, descr 
order by count desc 

多分私はそれを複雑にしているので、本当に助言をいただきたいと思います。

+1

あなたの質問の要件は、あなたがあなたのクエリに持っているものと異なっています。あなたは2016年と2017年だけで、あなたのフィルターは2007年までの値を見たいと言っていますか?本当に混乱しています。サンプルデータを追加し、サンプルから希望する結果がどのようなものかを検討してください。 –

+0

@JorgeCampos Jorgeさん、ありがとうございました。私はまだ2007年を探していましたが、私はデータと望ましい結果のサンプルを追加します。 – Dave

答えて

0
SELECT 
a.type, a.descr, count(year) as count 
FROM (
     SELECT 
     type, 
     descr, 
     date_part(`year`, date) as year 
     FROM table  
     WHERE year > 2015 and year < 2018 
) AS a 
GROUP BY a.year 
ORDER BY count DESC 
0
select 
    type, descr, 
    count(*) as count_total, 
    count(*) filter (where date >= '2016-01-01' and date <= '2016-12-31') as count_in_years 
from table 
group by type, descr 
having count(*) = count(*) filter (where date >= '2016-01-01' and date <= '2016-12-31') 
order by count desc 
関連する問題