2009-07-15 6 views
2

Я использую следующий запросУдаление повторяющихся записей

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 

и получать результат, как этот

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 

Я хочу, чтобы отобразить уникальные записи 2 одно время 30 один раз 40 один раз. Дублированные записи должны соответствовать SST.fromDate.

Как исправить мой запрос?

+0

, на какую дату вы хотите отобразить? – Josh

+0

Самая последняя дата – Waheed

ответ

1

Вы можете попробовать следующий запрос:

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

или вы используете MIN (SST.fromDate) ... Это зависит от даты, которую вы хотите увидеть. –

+0

Или вы можете использовать оператор SQL WHATEVER(). О, подождите, это еще не ANSI SQL ... –

1

Ну, записи фактически не дублируются, потому что даты разные. Вы могли бы сделать что-то вроде:

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

попробовать это (пример возвращает самую высокую дату в группе):

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 

В зависимости от того, что дату, которую вы хотите показать, вы можете выбрать наивысшее значение с помощью MAX или самого низкого значения с помощью MIN. Если у вас есть другие критерии, вам может понадобиться выполнить подзапрос.

-1

не достаточно просто исключить бы

SST.fromDate

из избранных?

+0

Я должен добавить этот SST.fromDate – Waheed