2014-04-27 1 views
0

합니다. 다음 성명을 실행하여 광고의 날짜를 기준으로 날짜 범위에있는 예술가가 어떤 도시에 있는지 선택합니다. 나에게 다음과 같은 결과를 제공때 DISTINCT 늘 내가 두 테이블을 가지고 그것을

SELECT DISTINCT tbl_Artist.Name, tbl_Ad.DateFrom, tbl_Ad.DateTo 
FROM tbl_Artist INNER JOIN tbl_Ad ON tbl_Ad.AdID = tbl_Ad.ArtistID 
WHERE DateFrom BETWEEN #12/1/2014# AND #12/10/2014# 
OR DateTo BETWEEN #12/1/2014# AND #12/10/2014# 
OR DateFrom < #12/1/2014# AND DatoTo > #12/10/2014#; 

는 :

Artist1 02.12.14 - 10.12.14 
Artist2 03.12.13 - 08.12.14 
Artist2 03.12.13 - 07.12.14 

쇼 중 하나의 날짜는 그를 두 번 올 수있는 다른 하루 전에 끝납니다. 나는 07.12.14와 08.12.14에 2 명의 아티스트를 보여 주지만, 10.12.14에는 오직 하나만 보여주고 자합니다.

어떻게 해결할 수 있습니까?

모든 일의
+0

하지만 ** 항상 ** 'AND'와'OR' 조건을 섞을 때 괄호를 사용하여 사람이 더 명확하게 읽을 수 있도록합니다. 날짜와 시간 유형을 다룰 때는 [ISO 형식] (http://en.wikipedia.org/wiki/ISO_8601)을 사용하는 것이 가장 좋습니다. 다른 문화권에서는 가치가 모호 할 수 있습니다. (12 월이나 10 월과 일월?). 'BETWEEN' [날짜/시간/타임 스탬프와 같은 비 필수 유형]을 사용하지 마십시오 (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-and -devil-have-common.aspx), 또는 전혀. –

+0

의견에 감사드립니다! 나는 아직 조금 새로운 것이므로, 내가받는 모든 도움에 대해 매우 감사한다. 또한 링크를 포함 해 주셔서 감사합니다. –

답변

1

먼저 나에게 충격적인 : 쇼 종료 날짜를 시작/종료 : FROM tbl_Artist INNER JOIN tbl_Ad ON tbl_Ad.AdID = tbl_Ad.ArtistID을 조인 절 tbl_Ad.ArtistID = tbl_Artist.AristID

한 두 번째 손해야, 당신은 예술가 쇼 만 1 행이 다른 날짜를 볼 필요가 같은 날짜 범위에서 ... 나는 말하고 싶습니다 : 당신의 아티스트가 교차하는 날짜를 가진 많은 쇼 끝을 가지고있는 이유는 무엇입니까? 하지만 이것은 join 절의 오류 때문이라고 생각합니다. 좋은 조인으로 쿼리를 다시 실행하십시오. 즉 지속되면

, 당신은 예술가에 의해 검색 광고에 대한 날짜의 최대 범위를 얻을 수 MIN()MAX() 기능을 사용할 수 있습니다 : 당신 때문에 선택한 조건 여기에 운도 참

SELECT 
    Name 
    ,MIN(DateFrom) 
    ,MAX(DateTo) 
FROM 
    (SELECT 
     tbl_Artist.Name 
     , tbl_Ad.DateFrom 
     , tbl_Ad.DateTo 
    FROM 
     tbl_Artist 
     INNER JOIN tbl_Ad 
      ON tbl_Ad.ArtistID = tbl_Artist.AristID 
    WHERE 
     DateFrom BETWEEN #12/1/2014# AND #12/10/2014# 
     OR DateTo BETWEEN #12/1/2014# AND #12/10/2014# 
     OR DateFrom < #12/1/2014# AND DatoTo > #12/10/2014#) 
GROUP BY 
    Name;