2017-09-13 11 views
-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

三個非常不同的答案。所有這些都是基於猜測,因爲它不完全清楚你想要做什麼。日期的詳細信息在您的示例數據和嘗試查詢之間不一致。 :) –

回答

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

因爲只需要這兩個具體日期,你可以做這樣的事情。

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

它不會......但問題不是很清楚他們想要什麼,因爲在他們的示例查詢中「兩個」日期是相同的。 –

+0

誰知道....我猜對了兩個日期,並把他們卡住了。也許他們想要特定的兩個日期,也許他們想要任何兩個日期....猜測 –

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') 
相關問題