2017-09-13 21 views
-1

と同じテーブル内の他の1つの日付と存在しなく:私はそうのようなテーブルを持っているSQL

LocationId | CreatedDate | HeadCount 
-----------+-------------+----------- 
1   | 2017-6-5 | 12 
3   | 2017-6-5 | 458 
5   | 2017-6-5 | 125 
1   | 2017-8-5 | 12 
5   | 2017-8-5 | 458 

私は特定の上に存在するテーブル内のすべてのLocationIdsを見つける必要があります別の日付には存在しません。テーブル内だから、私は以下しようとしている

3   | 2017-6-5 | 458 

を返却する必要があると思いますが、私は私のタスクを達成するために一時テーブルを使用する必要があるかもしれないと思うより上。

SELECT * 
FROM HeadCounts a 
FULL OUTER JOIN HeadCounts b ON a.LocationId = b.LocationId 
WHERE a.CreatedDate = '2017-6-5' 
    AND b.CreatedDate = '2017-6-5' 
    AND a.LocationId IS NULL 
    OR b.LocationId IS NULL 

ご協力いただければ幸いです。

+2

文字通り値は 'CreatedDate'に保存されているということですか?実際には 'VARCHAR'のように格納されていますか? – Siyual

+1

2つの特定の日付に興味がありますか、まったく異なる日付に興味がありますか? –

+2

3つの非常に異なる答え。すべてあなたがしようとしていることは完全にはっきりしていないので、ここでの推測に基づいています。また、日付の詳細がサンプルデータと試行されたクエリとで一貫していません。 :) –

答えて

3

あなたはWHERE NOT EXISTSでこれを行うことができます。

Select * 
From HeadCounts H1 
Where Not Exists 
(
    Select * 
    From HeadCounts H2 
    Where H1.LocationId = H2.LocationId 
    And  H1.CreatedDate <> H2.CreatedDate 
) 
1

あなたはこのような何かを行うことができる唯一のものを2つの特定の日付にしたいので。

select LocationID 
    , MAX(CreatedDate) 
    , MAX(HeadCount) 
from YourTable 
where CreatedDate in ('2017-6-5', '2017-8-5') 
group by LocationID 
having count(*) <= 1 
+0

@MartinSmith LOL。私はOPからそれらをコピーしました。 :) –

+1

それはできませんが、サンプルクエリで「2つの」日付が同じであるために、どちらが必要なのかという質問は本当に明確ではありません。 –

+0

誰かが知っている....私は2つの日付を推測し、戻ってきた。たぶん彼らは特定の2つの日付を望むかもしれない。 –

0
select LocationId, CreatedDate, HeadCount 
from HeadCounts 
where LocationId not in(
    select LocationId from HeadCounts 
     where locationid in(
      select LocationId from HeadCounts 
      where CreatedDate = '2017-6-5') 
and CreatedDate != '2017-6-5')