-1

これは私のデータベースのテーブルの構造です:

**Email**
id (PK)
email

**Mail**
id (PK)
recipient
time
...

特定のメールで受信したメールの分布を取得するために、次のクエリを実行します。

select e.email,count(m.id) from mail m 
    right outer join email e on m.recipient=e.email
    group by e.email

私は得る:

"e1";0
"e2";3644
"e3";0
"e4";10
"e5";4620
..

テーブル Email のすべての値が一致します。つまり、すべてのメールとcount=0. これで結構です。

問題は、結果を日付でフィルタリングするときです。

select e.email,count(m.id) from mail m 
right outer join email e on m.recipient=e.email
where m.time >= current_timestamp - interval '1 hour'
group by e.email

結果は次のとおりです。

"e1";1
"e2";1
"e3";1
...

を含む値を取得できcount=0ません。テーブル Mail に行がある電子メールを取得するだけです。
私は何を間違っていますか?

4

2 に答える 2

1

過去 1 時間以内に到着したメッセージでフィルター処理すると、それらのメッセージの 1 つを持っている人だけが取得されます。

null もチェックします。

WHERE m.time IS NULL OR m.time > current_timstamp...
于 2013-11-04T15:39:43.627 に答える