この問題の解決方法を探しています。私はLogEntryと呼ばれるテーブルを持っていて、複数のオフィスで使用されている情報を保管しています。そこには、任意の日にオフィスに来る訪問者をログに記録する必要があります。訪問者が来ていない場合、その日の「訪問者なし」を記録する必要があります。オフィスで「訪問者なし」のログを作成できなかったすべての日付を取得するクエリを実行するにはどうすればよいですか?SQL Serverにエントリのない日付のリストを取得
私はthis question(とその中にリンクされている記事)を見てきましたが、そのクエリを適合さえしても、オフィスに日付のエントリがない場合は空白の行を作成できますエントリを作成していない実際のオフィス。私がやろうとしていることをする方法はありますか?
declare @temp table (
CDate datetime,
loc_id varchar(50)
)
insert into @temp SELECT DISTINCT entryDate, locationID FROM LogEntry WHERE entryDate >= '05/01/2017' AND entryDate <= '07-31-2017'
;with d(date) as (
select cast('05/01/2017' as datetime)
union all
select date+1
from d
where date < '07/31/2017'
)
select DISTINCT t.loc_id, CONVERT(date, d.date)
FROM d LEFT OUTER JOIN @temp t ON d.date = t.CDate
GROUP BY t.loc_id, d.date
ORDER BY t.loc_id
私が言ったように、このクエリは私に日付範囲内の日付のリストを返し、その日にエントリを提出したすべての場所が、私は基本的に反対の情報を抽出する方法を見つけるしたいと思います:オフィス(locationIDで指定)が特定の日にエントリーを提出しなかった場合は、それらのlocationIDと欠席した日付のみを返します。
Sample data
EntryID | locationID | entryDate
=================================
1 1 07-01-2017
2 1 07-02-2017
3 2 07-02-2017
4 1 07-04-2017
Expected Result (for date range of 07-01 to 07-04)
locationID | missedEntryDate
============================
1 07-03-2017
2 07-01-2017
2 07-03-2017
2 07-04-2017
'DISTINCT'は無関係で、LEFT JOINの代わりに' RIGHT JOIN'を使います。 – Siyual
場所は特定の日付の複数のエントリを作成できるため、別名を追加しました。私は彼らが少なくとも1つを作成したことを知ることに興味があります。 –
私が言っていることは、 'GROUP BY'は本質的に' DISTINCT'というクエリを作ることです。 – Siyual