2016-05-23 16 views
0

可能であれば、これを1つのクエリーに入れておきたいと思います。基本的に、私は過去5日間に見た人のIDを取得したい、または2回以上見られたIDを同じクエリで保持したいと思います。それを2つのサブクエリまたは一時テーブルに分割することが最善のルートであれば、私はそのルートに行くことができます。できるだけ凝縮しておきたいだけです。どんな提案も大歓迎です。SQL where or having

select ID,Name 
from some table a 
where cast(a.[appointment date] as date) > cast(GETDATE() - 5 as date) 
group by id,name 
or having count(id) > 2 
+4

ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

答えて

3
HAVING句に日付条件を移動し

:私は、クエリの下に願っています

select ID, Name 
from sometable a 
group by id, name 
having count(id) > 2 
    or max(cast(a.[appointment date] as date)) > cast(GETDATE() - 5 as date) 
+0

brilliant!ありがとうございました! – bertj

+0

@bertj、これは質問の質問と微妙に異なり、同じ結果を返さない場合があります。 – Jodrell

+0

@ Jodrell、多分私は十分注意深く読まなかったかもしれませんが、違いは何ですか? – jarlh

0

あなたの質問に答えます。 >キャスト(日付として[予定日]) ここキャストsometableから

選択ID (GETDATE() - 5日など)ID カウントを有する(ID)> 2

0

によって 基質問の中で試行された質問と同じことをする。

SELECT 
      [Filtered].[Id], 
      [Filtered].[Name] 
    FROM 
      (
       SELECT 
          [Id], 
          [Name] 
        FROM 
          [some table] [A] 
        WHERE 
          CAST([A].[appointment date] AS DATE) > 
           CAST(GETDATE() - 5 AS DATE) 
      ) [Filtered] 
    GROUP BY 
       [Filtered].[Id], 
       [Filtered].[Name] 
     HAVING 
       COUNT([Filtered].[Id]) > 2