Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удалить строки из выборки с повторяющимся полем  [new]
zlobnipartizan
Member

Откуда:
Сообщений: 1
Доброго времени суток.
Возникла проблема следующего характера.
SQL-запросом формирую выборку из базы.
+

SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(mi,-5,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF

SELECT  T1.DateTime, T1.TimeConvert, T1.PSM,T2.COUNTS,T2.Interval FROM
(SELECT  temp1.DateTime, temp1.PSM, temp2.TimeConvert 
FROM 
(SELECT History.TagName, DateTime, Value as PSM, StartDateTime
 FROM History
 WHERE History.TagName IN ( 'GZU_11.ZAMERPSM')

 AND wwRetrievalMode = 'Cyclic'
 AND wwCycleCount = 100
 AND wwQualityRule = 'Extended'
 AND wwVersion = 'Latest'
 AND DateTime >= @StartDate
 AND DateTime <= @EndDate
) temp1

Inner join

(SELECT History.TagName, DateTime, vValue as TimeConvert, StartDateTime
 FROM History
 WHERE History.TagName IN ( 'GZU_11.ZAMERTIMECONVERT')

 AND wwRetrievalMode = 'Cyclic'
 AND wwCycleCount = 100
 AND wwQualityRule = 'Extended'
 AND wwVersion = 'Latest'
 AND DateTime >= @StartDate
 AND DateTime <= @EndDate
) temp2
ON temp1.DateTime=temp2.DateTime
WHERE temp1.StartDateTime >= @StartDate) T1

inner join

(SELECT  temp1.DateTime, temp1.COUNTS, temp2.Interval 
FROM 
(SELECT History.TagName, DateTime, Value as COUNTS, StartDateTime
 FROM History
 WHERE History.TagName IN ( 'GZU_11.ZAMERCOUNT')

 AND wwRetrievalMode = 'Cyclic'
 AND wwCycleCount = 100
 AND wwQualityRule = 'Extended'
 AND wwVersion = 'Latest'
 AND DateTime >= @StartDate
 AND DateTime <= @EndDate
) temp1

Inner join

(SELECT History.TagName, DateTime, Value as Interval, StartDateTime
 FROM History
 WHERE History.TagName IN ( 'GZU_11.ZAMERINTERVAL')

 AND wwRetrievalMode = 'Cyclic'
 AND wwCycleCount = 100
 AND wwQualityRule = 'Extended'
 AND wwVersion = 'Latest'
 AND DateTime >= @StartDate
 AND DateTime <= @EndDate
) temp2
ON temp1.DateTime=temp2.DateTime
WHERE temp1.StartDateTime >= @StartDate) T2
ON T1.DateTime=T2.DateTime


В результате получаю
[img]https://preview.ibb.co/gP07Z7/CDNG2.jpg[/img]

Задача получить выборку без повторяющихся записей, а уникальное поле TimeConvert. Изменение TimeConvert значит запись в таблицу новой строки, а лишние отбросить.

Чтобы в итоге получилось
DataTime PSM TimeConvert Counts Interval
19.04.2018 10:33:50 6 Пт апр 13 20:39:31 2018 5929 240
19.04.2018 10:33:59 7 Пт апр 13 20:45:31 2018 1024 240


Будьте добры, подскажите реализацию запроса.
С SQL столкнулся по работе первый раз, некоторые очевидные вещи для меня не очевидны.

К сообщению приложен файл. Размер - 142Kb
19 апр 18, 12:58    [21351794]     Ответить | Цитировать Сообщить модератору
 Re: Удалить строки из выборки с повторяющимся полем  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
zlobnipartizan,
Лень разбираться в логике, но для результата можно так:

SELECT  Min(T1.DateTime) as DateTime, T1.TimeConvert, T1.PSM,T2.COUNTS,T2.Interval FROM
/*Остальное без изменений 
и в конце:*/
Group by T1.TimeConvert, T1.PSM,T2.COUNTS,T2.Interval
19 апр 18, 13:09    [21351829]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить