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

Откуда: Екатеринбург
Сообщений: 138
Добрый день!

Подскажите как проще решить такую задачу:

Есть такой набор данных

_Description _Period _Fld7579
Filial1 17.04.2013 14:00 Error
Filial2 17.04.2013 14:00 Error
Filial1 17.04.2013 13:00 Error
Filial3 17.04.2013 11:00 Error


Как вернуть только по одной последней строке для каждого филиала, филиалов 9 штук, и они все могут идти в разнобой.

И еще один вопрос, результаты этого запроса должны отправляться на почту с помощью sp_send_dbmail, запрос результаты которого должны возвращается передается параметром в кавычках и внутри этого запроса тоже есть кавычки, как их можно "экранировать" чтобы скуль понял, что это не конец параметра, а часть запроса, запрос такого вида:

EXEC msdb.dbo.sp_send_dbmail @profile_name = ''Test",
@recipients = 'test@mail.ru',
@subject = 'Ошибки загрузки',
@query = ' 
select top 10 _Description, CONVERT(DATETIME, DATEADD (year,-2000,_Period),104) , _Fld7579  
from [materials].[dbo].[_Node18] as node 
inner join [materials].[dbo].[_InfoRg7571] as events
on node._IDRRef = events._Fld7572_RRRef
where _Fld7579 NOT LIKE ''  <-вот тут ошибка
order by _Period desc' 
17 апр 13, 15:37    [14193393]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select top 1 with ties _Description,	_Period,	_Fld7579
from mytable
order by row_number() over(partition by _Description order by _Period desc)
17 апр 13, 15:40    [14193420]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
EXEC msdb.dbo.sp_send_dbmail @profile_name = ''Test",
@recipients = 'test@mail.ru',
@subject = 'Ошибки загрузки',
@query = ' 
select top 10 _Description, CONVERT(DATETIME, DATEADD (year,-2000,_Period),104) , _Fld7579  
from [materials].[dbo].[_Node18] as node 
inner join [materials].[dbo].[_InfoRg7571] as events
on node._IDRRef = events._Fld7572_RRRef
where _Fld7579 NOT LIKE ''text''  <-вот тут ошибка
order by _Period desc' 
17 апр 13, 15:42    [14193428]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Centraloff
параметром в кавычках и внутри этого запроса тоже есть кавычки, как их можно "экранировать" чтобы скуль понял, что это не конец параметра, а часть запроса

Апостроф внутри строковой константы экранируется другим апострофом.
declare @s varchar(100);
set @s = 'Apostrophe''s ''test''';
select @s;
17 апр 13, 15:44    [14193448]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
aleks2
Guest
select * from
(select *, row_number() over(partition by _Description order by _Period DESC) as n from aTable) X
where n = 1
17 апр 13, 15:47    [14193470]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
Centraloff
Member

Откуда: Екатеринбург
Сообщений: 138
to Паганель

Спасибо, не совсем то, что я хотел получить, но думаю дальше уже сам доделаю, как делать я понял.

to Maxx

дело в том что проверка должна быть на не пустую строку и вот так '''' все равно выдает ошибку
17 апр 13, 15:52    [14193512]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Centraloff
дело в том что проверка должна быть на не пустую строку и вот так '''' все равно выдает ошибку
Пример пустой строки можно увидеть?
Уж не NULL ли Вы так называете?
Текст сообщения об ошибке надо угадать?
17 апр 13, 15:56    [14193544]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
Maxx
Member [скрыт]

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

declare @str nvarchar(2000) = ' 
select top 10 _Description, CONVERT(DATETIME, DATEADD (year,-2000,_Period),104) , _Fld7579  
from [materials].[dbo].[_Node18] as node 
inner join [materials].[dbo].[_InfoRg7571] as events
on node._IDRRef = events._Fld7572_RRRef
where _Fld7579 NOT LIKE ''text''  
order by _Period desc' 
print @str

строка в порядке ... ошибка какая ?
17 апр 13, 15:59    [14193563]     Ответить | Цитировать Сообщить модератору
 Re: Исключить повторяющиеся строки по одному полю  [new]
Centraloff
Member

Откуда: Екатеринбург
Сообщений: 138
iap,

Прошу прощения, все работает, в другом месте просто ошибся еще.

всем, спасибо
17 апр 13, 16:02    [14193584]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить