#sql-server #tsql
#sql-server #tsql
Вопрос:
У меня есть этот запрос, который работает и возвращает правильные повторяющиеся данные.
select [serverName], ActiveYN, count(servername)
from dbo.FarmStats_Server
group by [serverName], ActiveYN
having (count(servername) > 1)
возвращает 260 строк.
То, что мне нужно сделать, немного сложнее.
SELECT
dbo.FarmStats_Farm.FarmName,
dbo.FarmStats_Server.ServerName,
dbo.FarmStats_Server.obsDT, dbo.FarmStats_Server.ActiveYN
FROM
dbo.FarmStats_Farm
INNER JOIN
dbo.FarmStats_Server ON dbo.FarmStats_Farm.FarmID = dbo.FarmStats_Server.FarmIDFK
GROUP BY
dbo.FarmStats_Farm.FarmName, dbo.FarmStats_Server.ServerName, dbo.FarmStats_Server.obsDT, dbo.FarmStats_Server.ActiveYN
HAVING
(COUNT(dbo.FarmStats_Server.ServerName) > 1)
Этот запрос не возвращает результатов. Я что-то принципиально упускаю.
Конечной целью будет удаление одного из дубликатов.
Спасибо за вашу помощь.
Комментарии:
1. что возвращается при выполнении запроса без группы по разделам? Если вы получите результаты, можете ли вы посмотреть, есть ли в этом какие-либо дубликаты. Возможно, ваше ВНУТРЕННЕЕ СОЕДИНЕНИЕ отфильтровывает данные, которые вы не ожидаете.
2. @Jay Вы хотите удалить только один дубликат или сохранить только одну запись? Итак, если у вас есть 3 записи с одинаковыми [ServerName] и [ActiveYN], вы хотите, чтобы остались две или только одна?
3. Эрик, ты прав. цель здесь — удалить повторяющиеся записи в зависимости от возраста. для самого нового будет установлено значение active, остальные необходимо будет удалить из таблицы.
Ответ №1:
Вы можете использовать это в подзапросе, как показано ниже:
SELECT
dbo.FarmStats_Farm.FarmName,
dbo.FarmStats_Server.ServerName,
dbo.FarmStats_Server.obsDT,
dbo.FarmStats_Server.ActiveYN
FROM dbo.FarmStats_Farm
INNER JOIN dbo.FarmStats_Server fs
ON dbo.FarmStats_Farm.FarmID =
dbo.FarmStats_Server.FarmIDFK
WHERE EXISTS (SELECT
[serverName],
ActiveYN
FROM dbo.FarmStats_Server
WHERE servername = fs.servername
AND activeyn = fs.activeyn
GROUP BY [serverName],
ActiveYN
HAVING (COUNT(servername) > 1))
Комментарии:
1. Я думаю, я понимаю, чего вы пытаетесь достичь. Вложенный запрос не ограничивает результат только дубликатами. В нем представлены все записи в таблице.