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

Откуда: Донецк
Сообщений: 268
Привествую
есть данные испытаний в табице вида:
стенд
результат
дата время

Мне нужно оставить в базе данные испытания стенда только за 1 минуты
Те если есть несколько записей результатов испытания стендов произошедших в течении 1 минуты то оставить нужно только одно знчение, не могу сообразитть как это сделать
из записей
74265 1 2011-09-03 04:05:23.000 15,95 1 0 1
74252 1 2011-09-03 04:05:11.000 15,96 1 0 1
74258 1 2011-09-03 04:05:08.000 15,96 1 0 1
оставить только одну запись (любую) за 5ю минуту 4го часа.

Надеюсь нормально обяснил что сделать нужно :)
3 сен 11, 18:00    [11222831]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
GROUP BY стенд, DATEPART(MINUTE,[дата время])
3 сен 11, 18:16    [11222871]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
gr_vl,

ROW_NUMBER() OVER(PARTITION BY DATEDIFF(mi, 0, dt) ORDER BY ...) RN + фильтр WHERE RN = 1.
3 сен 11, 18:17    [11222872]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
gr_vl, дык пронумеруйте в разрезе минут на дату и отберите все что с номером=1. Либо удалите все, что не 1.
Т.е.:
... ROW_NUMBER OVER (PARTITION BY CONVERT(VARCHAR(16),[дата время],126) ORDER BY [дата время]) rn ...
3 сен 11, 18:23    [11222881]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
DeBaggio
Member

Откуда:
Сообщений: 17
select * 
from ТАБЛИЦА 
where id in
(select max(id) from ТАБЛИЦА
Group by datepart(minute, КОЛОНКА_С_ДАТОЙ)

Как-то так ...
3 сен 11, 19:05    [11222950]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
gr_vl
Member

Откуда: Донецк
Сообщений: 268
kDnZP,

Да только чистить нужно по каждому стенду отдельно, те оставлять данные за 1 минуту в приделах стенда

SELECT top 10000 PointID, InsertDT,Value, ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(16),Insertdt,126) ORDER BY insertdt ) RN

FROM Trend
where PointID=1


дает верный результат по 1му стенду, только неполучается сделать групировку по стендах.....
4 сен 11, 11:48    [11223826]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
gr_vl
kDnZP,

Да только чистить нужно по каждому стенду отдельно, те оставлять данные за 1 минуту в приделах стенда

SELECT top 10000 PointID, InsertDT,Value, ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(16),Insertdt,126) ORDER BY insertdt ) RN

FROM Trend
where PointID=1


дает верный результат по 1му стенду, только неполучается сделать групировку по стендах.....
Ну так добавьте стенд в PARTITION BY!
Я ж Вам писал, кажется.
4 сен 11, 11:56    [11223832]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
gr_vl
kDnZP,

Да только чистить нужно по каждому стенду отдельно, те оставлять данные за 1 минуту в приделах стенда

SELECT top 10000 PointID, InsertDT,Value, ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(16),Insertdt,126) ORDER BY insertdt ) RN

FROM Trend
where PointID=1


дает верный результат по 1му стенду, только неполучается сделать групировку по стендах.....

Ну так добавьте к группировке по минутам группировку по стендам.
4 сен 11, 12:03    [11223837]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
gr_vl
Member

Откуда: Донецк
Сообщений: 268
Не могу понятьб почему ниже приведенный скрипт удалил все записи из таблицы

WITH Ttmp AS
(
SELECT RN=ROW_NUMBER() OVER(PARTITION BY PointID,CONVERT(VARCHAR(16), Insertdt,126) ORDER BY insertdt),PointID,InsertDt,Value,CONVERT(VARCHAR(16), Insertdt,126) as minut
FROM Trend

)
DELETE FROM TREND WHERE TRENDID in (SELECT TRENDID FROM Ttmp WHERE RN>1)
4 сен 11, 13:06    [11223905]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
gr_vl
Не могу понятьб почему ниже приведенный скрипт удалил все записи из таблицы

WITH Ttmp AS
(
SELECT RN=ROW_NUMBER() OVER(PARTITION BY PointID,CONVERT(VARCHAR(16), Insertdt,126) ORDER BY insertdt),PointID,InsertDt,Value,CONVERT(VARCHAR(16), Insertdt,126) as minut
FROM Trend

)
DELETE FROM TREND WHERE TRENDID in (SELECT TRENDID FROM Ttmp WHERE RN>1)
В Ttmp нет никакого поля TRENDID!
В этом случае считается, что это поле в подзапросе нано брать из внешнего запроса.
Но тогда получается, что TRENDID сравнивается всегда само с собой!
А это условие всегда возвращает TRUE в данном случае.

Не понимаю, что мешало в первом сообщении рассказать, что Вам на самом деле надо?
WITH Ttmp(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY PointID, CONVERT(VARCHAR(16),InsertDt,126)ORDER BY InsertDt)FROM Trend)
DELETE Ttmp
WHERE N>1;
Бросается в глаза чудовищная неряшливость в записи запроса.
То Insertdt, то InsertDt
То Trend, то TREND
Непонятно, зачем Вы так делаете. У меня, например регистрозависимый COLLATION.
Приходится после копирования долго править Ваш запрос.
4 сен 11, 13:54    [11223966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить