2013-03-05 63 views
0

下面是查詢SELECT DISTINCT不同於結果

select DISTINCT movie_master.MovieMasterID, MOVIE_VERSION.ReleaseDate, 
movie_master.displayorder,movie_classification.mc_code, 
movie_master.title As Title, 
movie_master.BioCast,movie_master.BioDirector,movie_master.LinkWord, 
CASE WHEN ((DATEDIFF(day,MOVIE_VERSION.ReleaseDate,getdate()) <=7) and (DATEDIFF(day,MOVIE_VERSION.ReleaseDate,getdate()) >=0)) THEN 'JUST RELEASED' ELSE '' END AS RELEASETAG, 
movie_master.Synopsis,movie_language.NAME as Language, 
CASE WHEN movie_master.DistributorID = 8 THEN 0 ELSE 9999 END AS distributororder, 
movie_distributor.name as distributor 
from movie_master 
left join MOVIE_LANGUAGE on MOVIE_MASTER.Language = movie_language.languageid 
left join movie_distributor on MOVIE_MASTER.distributorid = movie_distributor.distributorid 
left join movie_version on MOVIE_MASTER.MovieMasterID = MOVIE_VERSION.MovieMasterID 
left join movie_classification on MOVIE_MASTER.classification = movie_classification.classificationid 
left join movie_itemdetails on MOVIE_MASTER.MovieMasterID = movie_itemdetails.MovieMasterID 
where MOVIE_VERSION.ReleaseDate <= convert(varchar, GETDATE(), 101) 
and MOVIE_VERSION.MovieMasterID = movie_master.MovieMasterID 
and movie_master.classification = movie_classification.classificationid 
and movie_master.MovieMasterID = movie_itemdetails.MovieMasterID and movie_itemdetails.fieldid = 1 and movie_itemdetails.Type ='TRAILER' 
and ((MOVIE_VERSION.FilmCode in (SELECT DISTINCT FILMID FROM MOVIE_TEMP)) OR (MOVIE_VERSION.Title in (SELECT DISTINCT TITLE FROM MOVIE_TEMP))) 
AND LEFT(MOVIE_VERSION.FILMCODE,1) <> 6 
and MOVIE_VERSION.Enabled = 1 
AND MOVIE_MASTER.Enabled = 1 
AND (MOVIE_MASTER.MovieMasterID in (SELECT DISTINCT MOVIE_MASTER.MovieMasterID FROM MOVIE_MASTER)) 
order by MOVIE_MASTER.displayorder, MOVIE_VERSION.ReleaseDate desc, distributororder, MOVIE_MASTER.TITLE 

和結果集

310 2013-03-01 00:00:00.000 9999 NA test456    JUST RELEASED  NA 9999 
310 2013-02-28 00:00:00.000 9999 NA test456    JUST RELEASED  NA 9999 
244 2013-02-10 00:00:00.000 9999 U I Love Hong Kong 2013 Alan Tam, Veronica Yip, Natalis Chan, Eric Tsang, Stanley Fung, Bosco Wong, Michael Tse, Kate Tsui, Joyce Cheng Chung Shu-Kai   The story takes place in the 1970s until modern times, in which all families are happily prepare and welcome the Chinese New Year in Hong Kong. However, a traditional restaurant in Yau Ma Tei faces terrible problem. At last, everything solved with the neighbours’ kind support and assistance as happy ending. CANTONESE 0 

我的問題是,我怎麼能進一步提高我的查詢到不同相同的記錄?

+0

我在結果集中看不到任何重複記錄 – 2013-03-05 10:04:58

+0

沒有重複的記錄。具有相同名稱的記錄具有不同的日期,即有兩個版本具有不同的發佈日期。 – Guffa 2013-03-05 10:05:15

+0

對不起,我不是想說重複的記錄。是的,具有相同名稱和不同日期的記錄,我如何進一步區分它們以顯示1條記錄而不是2條記錄? – user2135208 2013-03-05 10:09:31

回答

0

您可以選擇最後日期,以及在選擇列表中的其他項目添加分組:

select DISTINCT movie_master.MovieMasterID, max(MOVIE_VERSION.ReleaseDate), 
movie_master.displayorder, movie_classification.mc_code, 
movie_master.title As Title, 
movie_master.BioCast, movie_master.BioDirector, movie_master.LinkWord, 
CASE WHEN ((DATEDIFF(day,max(MOVIE_VERSION.ReleaseDate),getdate()) <=7) 
and (DATEDIFF(day,max(MOVIE_VERSION.ReleaseDate),getdate()) >=0)) 
THEN 'JUST RELEASED' ELSE '' END AS RELEASETAG, 
movie_master.Synopsis,movie_language.NAME as Language, 
CASE WHEN movie_master.DistributorID = 8 THEN 0 ELSE 9999 END AS distributororder, 
movie_distributor.name as distributor 
... 
group by movie_master.MovieMasterID, movie_master.displayorder, movie_classification.mc_code, 
movie_master.title, movie_master.BioCast, movie_master.BioDirector, 
movie_master.LinkWord, movie_master.Synopsis, 
movie_language.NAME, movie_master.DistributorID, movie_distributor.name 
order by MOVIE_MASTER.displayorder, max(MOVIE_VERSION.ReleaseDate) desc, distributororder, MOVIE_MASTER.TITLE 
+0

您好Polina,您的查詢並沒有真正解決我正在尋找的輸出。我仍然有相同的記錄,並希望保留您刪除的「Order By」 – user2135208 2013-03-05 10:20:58

+0

您應該在「按...排序」之前添加「group by ...」 – Polina 2013-03-05 10:27:56

+0

Hi Polina,它仍然給相同的結果 – user2135208 2013-03-05 10:34:24

0

是我腦子裏浮現的第一件事:

 

    SELECT 
    MovieMasterID, 
    MAX(ReleaseDate) as ReleaseDate, 
    displayorder, 
    mc_code, 
    Title, 
    BioCast, 
    BioDirector, 
    LinkWord, 
    RELEASETAG, 
    Synopsis, 
    Language, 
    distributororder, 
    distributor 
    FROM(
    select DISTINCT 
     movie_master.MovieMasterID, 
     MOVIE_VERSION.ReleaseDate, 
     movie_master.displayorder, 
     movie_classification.mc_code, 
     movie_master.title As Title, 
     movie_master.BioCast, 
     movie_master.BioDirector, 
     movie_master.LinkWord, 
     CASE 
     WHEN ((DATEDIFF(day,MOVIE_VERSION.ReleaseDate,getdate()) =0)) 
       THEN 'JUST RELEASED' 
      ELSE '' 
     END AS RELEASETAG, 
     movie_master.Synopsis, 
     movie_language.NAME as Language, 
     CASE 
      WHEN movie_master.DistributorID = 8 THEN 0 
      ELSE 9999 
     END AS distributororder, 
     movie_distributor.name as distributor 
    from movie_master 
    left join MOVIE_LANGUAGE 
     on MOVIE_MASTER.Language = movie_language.languageid 
    left join movie_distributor 
     on MOVIE_MASTER.distributorid = movie_distributor.distributorid 
    left join movie_version 
     on MOVIE_MASTER.MovieMasterID = MOVIE_VERSION.MovieMasterID 
    left join movie_classification 
     on MOVIE_MASTER.classification = movie_classification.classificationid 
    left join movie_itemdetails 
     on MOVIE_MASTER.MovieMasterID = movie_itemdetails.MovieMasterID 
    where MOVIE_VERSION.ReleaseDate 6 
     and MOVIE_VERSION.Enabled = 1 
     AND MOVIE_MASTER.Enabled = 1 
     AND (MOVIE_MASTER.MovieMasterID in (SELECT DISTINCT MOVIE_MASTER.MovieMasterID FROM MOVIE_MASTER)) 

    ) T 
    GROUP BY MovieMasterID,displayorder,mc_code,Title,BioCast,BioDirector,LinkWord,RELEASETAG,Synopsis,Language,distributororder,distributor 
order by displayorder, ReleaseDate desc, distributororder, TITLE 
0

嘗試此查詢

select DISTINCT movie_master.MovieMasterID, 
       m.ReleaseDate, 
       movie_master.displayorder,movie_classification.mc_code, 
       movie_master.title As Title, 
       movie_master.BioCast,movie_master.BioDirector,movie_master.LinkWord, 
CASE WHEN ((DATEDIFF(day,m.ReleaseDate,getdate()) <=7) and (DATEDIFF(day,m.ReleaseDate,getdate()) >=0)) THEN 'JUST RELEASED' ELSE '' END AS RELEASETAG, 
movie_master.Synopsis,movie_language.NAME as Language, 
CASE WHEN movie_master.DistributorID = 8 THEN 0 ELSE 9999 END AS distributororder, 
movie_distributor.name as distributor 
from movie_master 
left join MOVIE_LANGUAGE on MOVIE_MASTER.Language = movie_language.languageid 
left join movie_distributor on MOVIE_MASTER.distributorid = movie_distributor.distributorid 
left join movie_version m on MOVIE_MASTER.MovieMasterID = m.MovieMasterID 
left join movie_classification on MOVIE_MASTER.classification = movie_classification.classificationid 
left join movie_itemdetails on MOVIE_MASTER.MovieMasterID = movie_itemdetails.MovieMasterID 
where m.ReleaseDate <= convert(varchar, GETDATE(), 101) 
and m.MovieMasterID = movie_master.MovieMasterID 
and movie_master.classification = movie_classification.classificationid 
and movie_master.MovieMasterID = movie_itemdetails.MovieMasterID and movie_itemdetails.fieldid = 1 and movie_itemdetails.Type ='TRAILER' 
and ((m.FilmCode in (SELECT DISTINCT FILMID FROM MOVIE_TEMP)) OR (m.Title in (SELECT DISTINCT TITLE FROM MOVIE_TEMP))) 
AND LEFT(m.FILMCODE,1) <> 6 
and m.Enabled = 1 
AND MOVIE_MASTER.Enabled = 1 
AND (MOVIE_MASTER.MovieMasterID in (SELECT DISTINCT MOVIE_MASTER.MovieMasterID FROM MOVIE_MASTER)) 
AND EXISTS (
      SELECT 1 
      FROM movie_version m2 
      WHERE MOVIE_MASTER.MovieMasterID = m2.MovieMasterID 
      HAVING MAX(m2.ReleaseDate) = m.ReleaseDate 
      )    
order by MOVIE_MASTER.displayorder, m.ReleaseDate desc, distributororder, MOVIE_MASTER.TITLE 
+0

謝謝,但錯誤被捕獲 - 列'MOVIE_VERSION.ReleaseDate'在HAVING子句中無效,因爲它不包含在集合函數或GROUP BY子句中。 – user2135208 2013-03-05 10:45:21

+0

答案已更新;) – 2013-03-05 11:57:45