Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Помогите пожалуста составить запрос


Автор: Antimol 28.7.2007, 13:38
Только начал работать с SQL Server 2005, и столкнулся с такой проблемой:
Есть таблица с названием A , и с набором полей:
id                int    
Server_Name    nvarchar(50)
start_time    datetime
Start_Count    real        
Average    int    
    
и есть простой запрос, который выбирает из таблицы все ети поля:

Код
select Server_name,start_time,Start_Count,Average from a


Server_Name    start_time    Start_Count       Average
=====================================
server3    2001-01-01    21                2313
server1    2001-02-10    21                321
server2    2001-03-02    22                322
server1    2001-07-02    232                  321
server3    2004-02-02    213                 231
server1    2007-07-05    231                231
server3    2009-07-05    231                321
                   
Нужно, чтобы выбирались записи из неповторяющимися значениями в поле Server_Name.
Пробовал 
Код
select DISTINCT Server_name,start_time,Start_Count,Average from a
 выводит тоже самое. 
Заранее спасибо.

Автор: Данкинг 28.7.2007, 16:37
У меня SQL не установлен сейчас, проверить не могу. А нечто подобное прокатит?

Код

select Server_name,start_time,Start_Count,Average from a where select DISTINCT Server_name from a

Автор: ivashkanet 28.7.2007, 17:41
Цитата(Данкинг @  28.7.2007,  16:37 Найти цитируемый пост)
where select DISTINCT Server_name from a

Данкинг, мне кажется выражение у where должно возвращать логическое значение. Хотя с MS SQL сервером давно не работал
Цитата(Antimol @  28.7.2007,  13:38 Найти цитируемый пост)
Пробовал 
Код
select DISTINCT Server_name,start_time,Start_Count,Average from a
 выводит тоже самое. 

Distinct объединяет только полностью идентичные строки.

Цитата(Antimol @  28.7.2007,  13:38 Найти цитируемый пост)
Нужно, чтобы выбирались записи из неповторяющимися значениями в поле Server_Name.

Antimol, возьмем, например, server1. Какая из строк должна выводиться для server1?

Ниже будет выводиться по одной строке для каждого сервера (выбирается запись с наибольшей датой)
Код

SELECT  Server_Name, start_time, Start_Count, Average FROM a as query
WHERE  start_time =  
(SELECT max(start_time) 
    FROM a as subquery 
    WHERE query.Server_Name = Server_Name)



P.S. Не уверен что это лучший вариант, но работает.

Автор: Antimol 30.7.2007, 23:44
Спасибо все теперь ясно, что и как!!  smile 

Автор: ivashkanet 31.7.2007, 07:42
Не за что. Приходите еще ;-)

Автор: Antimol 31.7.2007, 11:00
ок. Обязательно зайду.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)