0

SQL Server 2008 R2 2 つのテーブルがあります。1 つの Main レコードと、共通のキー フィールド sysid と main_id を持つ Main に関連する Notes です。(1 つのメイン レコードに多くのメモを含めることができます)

過去 30 日間にそのレコードに関連する Notes テーブルにレコードが作成されていないメイン テーブルのレコードを一覧表示したいと考えています。

メイン テーブル フィールド > file_number、sysid

ノート テーブル フィールド > note_date、main_id

検索から100の異なる提案を試みましたが、必要なものは何も得られません。以下が最も近いものだと思いますが、メモがまったく存在しないレコードのみが表示され、既存のメモはあるが過去 30 日間は何もないメイン レコードは表示されません。行を削除しても同じ結果が得られますAND db.notes.[date] > DATEADD(dd,-30,getdate()))

SELECT *
  FROM db.main
 WHERE NOT EXISTS(SELECT NULL
       FROM db.notes
       WHERE db.main.sysid = db.notes.main_id AND db.notes.[date] > DATEADD(dd,-30,getdate()))
 ORDER BY db.main.ile_number

どんな提案でも大歓迎です。

* *クライアントは追加の列を要求しました。最後のメモの日付。したがって、彼らは x 日間メモのないメイン レコードのリストと、最後のメモの日付を求めています。

4

2 に答える 2

0

LEFT OUTER JOIN でこれを行います。

select * 
from db.main m
left outer join db.notes n on m.sysid = n.main_id 
    and n.[date] > dateadd(dd, -30, getdate())) 
where n.main_id is null
order by m.ile_number
于 2013-04-05T15:04:46.453 に答える
0

これはあなたが探しているものですか?

選択する *

FROM db.main

sysid が含まれていない場所

(select main_id FROM notes)

連合

選択する *

FROM db.main

sysid が含まれていない場所

(select main_id 

FROM notes 

WHERE notes.[date] > DATEADD(dd,-30,getdate())

)
于 2013-04-05T15:05:03.327 に答える