2009-07-15 7 views
2

J'utilise la requête suivanteSuppression de doublons

SELECT SS.sightseeingId AS 'sID' 
    , SS.SightseeingName 
    , SS.displayPrice AS 'Price' 
    , SST.fromDate 
FROM tblSightseeings SS INNER JOIN 
    tblSightseeingTours SST ON SS.sightseeingId = SST.sightseeingId 
WHERE SS.isActive = 1 AND SS.isDisplayOnMainPage = 1 

et obtenir tel résultat

sID | SightseeingName      | Price | fromDate 
------------------------------------------------------------------------------ 
    2 | Dinner Cruise Bateaux London (Premier) | 40 | 2009-04-01 00:00:00.000 
    2 | Dinner Cruise Bateaux London (Premier) | 40 | 2009-12-29 00:00:00.000 
30 | Jack The Ripper, Ghosts and Sinister | 35.1 | 2009-04-01 00:00:00.000 
30 | Jack The Ripper, Ghosts and Sinister | 35.1 | 2009-10-01 00:00:00.000 
40 | Grand Tour of London     |  0 | 2009-05-01 00:00:00.000 
40 | Grand Tour of London     |  0 | 2010-05-01 00:00:00.000 
87 | Warwick, Stratford, Oxford and The  | 25 | 2009-04-01 00:00:00.000 
87 | Warwick, Stratford, Oxford and The  | 25 | 2009-11-01 00:00:00.000 

Je veux afficher les enregistrements uniques 2 une fois 30 une fois 40 fois. Les enregistrements en double sont dus à SST.fromDate.

Comment corriger ma requête ??

+0

quelle date souhaitez-vous afficher? – Josh

+0

Date la plus récente – Waheed

Répondre

1

Vous pouvez essayer la prochaine requête:

select SS.sightseeingId, SS.SightseeingName, SS.displayPrice, MAX(SST.fromDate) 
from  tblSightseeings SS inner join 
       tblSightseeingTours SST on SS.sightseeingId = SST.sightseeingId 
where SS.isActive = 1 and SS.isDisplayOnMainPage = 1 
GROUP by SS.sightseeingId, SS.SightseeingName, SS.displayPrice 
+0

ou vous utilisez van MIN (SST.fromDate) ... Cela dépend de la date que vous voulez voir. –

+0

Ou vous pouvez utiliser l'opérateur SQL WHATEVER(). Oh, attendez, ce n'est pas encore en SQL ANSI ... –

1

Eh bien, les enregistrements ne sont pas réellement dupliqués, parce que les dates sont différentes. Vous pouvez faire quelque chose comme:

select SS.sightseeingId, SS.SightseeingName, SS.displayPrice, MIN(SST.fromDate) AS FromDate 
from  tblSightseeings SS inner join 
       tblSightseeingTours SST on SS.sightseeingId = SST.sightseeingId 
where SS.isActive = 1 and SS.isDisplayOnMainPage = 1 
GROUP BY ss.sightseeingid, ss.sightseeingname, ss.displayprice 
1

essayez ceci (exemple retourne la date la plus élevée dans le groupe):

SELECT SS.sightseeingId, 
     SS.SightseeingName, 
     SS.displayPrice, 
     MAX(SST.fromDate) 
FROM  tblSightseeings SS 
INNER JOIN tblSightseeingTours SST 
     ON SS.sightseeingId = SST.sightseeingId 
WHERE SS.isActive = 1 and SS.isDisplayOnMainPage = 1 
GROUP BY SS.sightseeingId, 
     SS.SightseeingName, 
     SS.displayPrice 

Selon ce que date que vous voulez montrer, vous pouvez sélectionner le plus élevé en utilisant MAX ou le plus bas en utilisant MIN. Si vous avez d'autres critères, vous devrez peut-être faire une sous-requête.

-1

Ne serait-il assez juste exclure la

SST.fromDate

de la sélection?

+0

Je dois ajouter ce SST.fromDate – Waheed