2011-01-05 8 views
2

SQLは私の最大の強みではありません。SQL select文を作成するのに役立ちます

基本的にはこれが私の必要条件です。テーブルには、名前のリストと、その名前がテーブルに入力されたときのタイムスタンプが格納されます。名前は1週間に複数回入力できますが、1日に1回しか入力できません。

私は、過去7日間にいつでも入力された名前を返すようにしたいが、今日は返さない。

Select * from table where Date(timestamp) = Date(now()) 

、過去7日間に入力された名前のリストを取得するために、今日を含めない:

Select * from table where (Date(now())- Date(timestamp) < 7) and (date(timestamp) != date(now())) 

が今日入った名前のリストを取得するには、これは私が持っている文です最初のクエリがセットまたは結果を返す場合 は、Aと言う

、および2番目のクエリは、私が得ることができますどのように、Bを返し

B-A 

答えて

3

普通の英語では、2番目のクエリのレコードに、最初のクエリに名前がないレコードが必要です。 SQL内:

Select * 
    from table 
    where (Date(now())- Date(timestamp) < 7) 
     and (date(timestamp) != date(now())) 
     and name not in (Select name 
          from table 
          where Date(timestamp) = Date(now()) 
         ) 
+0

は美しく動作します!どうもありがとうございます。 – xbonez

1
not in 

select pk from B where PK not in A 

よう

またはあなたがSQL Serverと作業している場合は、これを試してみてください

Select * from table where (Date(now())- Date(timestamp) < 7) and (Date(now())- Date(timestamp) > 1) 
+0

次の問合せは、D-1日からD-7日までに入力されたすべての名前を戻します。しかし、この結果から、D日に入力された可能性があるすべての結果を除外する必要があります。しかし、お試しいただきありがとうございます。 – xbonez

+0

は、あなたがどのような意味を持っているかわからなかった。彼らは今日なぜ入力されただけで名前を除外したいのですか?しかし、そうするので、Joeの例のように、NOT INを使用する必要があります。 – Beth

4

ような何かを行うことができます。

SELECT * FROM Table 
WHERE Timestamp BETWEEN 
     dateadd(day,datediff(day,0,getdate()),-7), 
    AND dateadd(day,datediff(day,0,getdate()),0) 

これは、タイムスタンプが間にあることを保証00:00 7日前、00:00今日。 00:00を超える今日のエントリは含まれません。

+0

私は間違っているかもしれませんが、私が質問を読んだとき、前の7日間に入力された名前と今日も入力された名前を除外するという要件があります。 –

+0

@ジョー:私は質問にも戻った。 "...過去7日間にいつでも入力された名前ですが、今日ではありません" –

+0

ジョーは私の質問の解釈にぴったりだった。しかし、私が私の質問を読むために戻ったとき、私はそれをあいまいに言いました。申し訳ありませんが、とにかく助けてくださったことに感謝します。 – xbonez

関連する問題