Rre Rre Горю!!! Помогите сделать запрос
От: bralgin США www.dwh-club.com
Дата: 24.03.02 08:51
Оценка:
Здравствуйте
Горю, программу еще неделю назад надо было сдать

Вопрос:
Используется MS SQL2000 Server
Есть таблица "Table"

-----------------------------
Name    :  Date     : Time
-----------------------------
sveta    4 Mar 2002  08:50:50    *     
bis      4 Mar 2002  08:51:08                    
marina   4 Mar 2002  08:52:27
diana    4 Mar 2002  08:53:12    **    
sveta    4 Mar 2002  10:50:50    *                 
diana    4 Mar 2002  11:00:12    **
sveta    4 Mar 2002  13:50:50    *
ajamal   4 Mar 2002  13:54:23
 ...       .....      .....
diana    5 Mar 2002  08:40:12    **
Shae     5 Mar 2002  08:54:20
sveta    5 Mar 2002  08:50:50    *
diana    5 Mar 2002  09:40:12    **
-----------------------------
* sveta - 4 мар появлялась 3 раза + 1 раз 5 мар 
** diana - 4 мар появлялась 2 раза + 2 раза 5 мар


Как обрботать эту таблицу, чтобы у каждого пользователя для каждой даты оставалась только одна запись, с самым раним временем, остальные удалялись.

-----------------------------
Name    :  Date     : Time
-----------------------------
sveta    4 Mar 2002  08:50:50    *     
bis      4 Mar 2002  08:51:08            
marina   4 Mar 2002  08:52:27
diana    4 Mar 2002  08:53:12    **     
Shae     4 Mar 2002  08:54:20              
ajamal   4 Mar 2002  13:54:23
 ...       .....      .....
diana    5 Mar 2002  08:40:12    **    
Shae     5 Mar 2002  08:54:20        
sveta    5 Mar 2002  08:50:50    *    
-----------------------------           
* sveta - 4 мар, 5 Мар осталась по 1 раз с самым раним временем
** diana - 4 мар, 5 мар осталась по 1 раз с самым раним временем


Можно ли это сделать только с помощью SQL (transact-SQL)?

Заранее спасибо!

Игорь Бралгин

15.09.03 11:57: Ветка выделена из темы Горю!!! Помогите сделать запрос
Автор: VCoder
Дата: 28.05.03
— _MM_
23.10.03 18:50: Перенесено модератором из 'Священные войны' — ХД
http://www.flickr.com/photos/bralgin/
RE:RE:Rre Горю!!! Помогите сделать запрос
От: beginner  
Дата: 24.03.02 09:21
Оценка:
Самый извратный вариант, который сходу приходит в голову:

DECLARE @DATE Date, @NAME VarChar(20), @MINTIME Time 

DECLARE MyCursor CURSOR FOR SELECT DISTINCT Name, Date FROM Table1  
 
OPEN MyCursor

WHILE (1=1)
 BEGIN
  FETCH NEXT FROM MyCursor INTO @NAME, @DATE 
  IF (@FETCH_STATUS <> -1)
   BEGIN
     SELECT @MINTIME = MIN([Time]) FROM Table1  
     DELETE FROM Table1 WHERE 
         ([NAME] = @Name) AND 
         ([DATE] = @Date) AND 
         ([TIME] > @Time)  
   END  
  ELSE BREAK
 END

CLOSE MyCursor
DEALLOCATE MyCursor


Не знаю, будет работать или нет. Я далеко не асс в T-SQL
Удачи!


Здравствуйте bralgin, Вы писали:

B>Здравствуйте

B>Горю, программу еще неделю назад надо было сдать

B>Вопрос:

B>Используется MS SQL2000 Server
B>Есть таблица "Table"
B>-----------------------------
B>Name : Date : Time
B>-----------------------------
B>sveta 4 Mar 2002 08:50:50 *
B>bis 4 Mar 2002 08:51:08
B>marina 4 Mar 2002 08:52:27
B>diana 4 Mar 2002 08:53:12 **
B>sveta 4 Mar 2002 10:50:50 *
B>diana 4 Mar 2002 11:00:12 **
B>sveta 4 Mar 2002 13:50:50 *
B>ajamal 4 Mar 2002 13:54:23
B> ... ..... .....
B>diana 5 Mar 2002 08:40:12 **
B>Shae 5 Mar 2002 08:54:20
B>sveta 5 Mar 2002 08:50:50 *
B>diana 5 Mar 2002 09:40:12 **
B>-----------------------------
B>* sveta — 4 мар появлялась 3 раза + 1 раз 5 мар
B>** diana — 4 мар появлялась 2 раза + 2 раза 5 мар

B>Как обрботать эту таблицу, чтобы у каждого пользователя для каждой даты оставалась только одна запись, с самым раним временем, остальные удалялись.

B>-----------------------------
B>Name : Date : Time
B>-----------------------------
B>sveta 4 Mar 2002 08:50:50 *
B>bis 4 Mar 2002 08:51:08
B>marina 4 Mar 2002 08:52:27
B>diana 4 Mar 2002 08:53:12 **
B>Shae 4 Mar 2002 08:54:20
B>ajamal 4 Mar 2002 13:54:23
B> ... ..... .....
B>diana 5 Mar 2002 08:40:12 **
B>Shae 5 Mar 2002 08:54:20
B>sveta 5 Mar 2002 08:50:50 *
B>-----------------------------
B>* sveta — 4 мар, 5 Мар осталась по 1 раз с самым раним временем
B>** diana — 4 мар, 5 мар осталась по 1 раз с самым раним временем

B>Можно ли это сделать только с помощью SQL (transact-SQL)?


B>Заранее спасибо!


B>Игорь Бралгин


15.09.03 11:50: Ветка выделена из темы Горю!!! Помогите сделать запрос
Автор: VCoder
Дата: 28.05.03
— _MM_
Re[2]: RE:Rre Горю!!! Помогите сделать запрос
От: beginner Россия  
Дата: 24.03.02 09:38
Оценка:
Здравствуйте beginner, Вы писали:

B>Самый извратный вариант, который сходу приходит в голову:

::skiped::

Да, вариант и правда извратный, так будет быстрее:

select [name], [date], min([time]) as [time]
    from [table]
    group by [name], [date]
__________________
per aspera ad astra
RE RE Rre Горю!!! Помогите сделать запрос
От: JibSkeart Мухосранск  
Дата: 24.03.02 14:46
Оценка:
Попробуй Енто !

select name,min(time) from TABLE
group by name


15.09.03 11:49: Ветка выделена из темы Горю!!! Помогите сделать запрос
Автор: VCoder
Дата: 28.05.03
— _MM_
i i
(':')
(\/);(\/)
Re[3]: RE:Rre Горю!!! Помогите сделать запрос
От: bralgin США www.dwh-club.com
Дата: 24.03.02 20:22
Оценка:
....
B>Да, вариант и правда извратный, так будет быстрее:

B>
B>select [name], [date], min([time]) as [time]
B>    from [table]
B>    group by [name], [date]
B>


Но мне надо удалить строки, которые не отображаютя в Вашем запросе
http://www.flickr.com/photos/bralgin/
Re[4]: RE:Rre Горю!!! Помогите сделать запрос
От: beginner Россия  
Дата: 24.03.02 21:54
Оценка:
Здравствуйте bralgin, Вы писали:

B>Но мне надо удалить строки, которые не отображаютя в Вашем запросе


Ну, а если так:
delete [table]
    from [table] as t left outer join
    ( select top 100 percent [name], [date], min([time]) as [time]
        from [table]
        group by [name], [date]
        order by [name]
    ) as tt on tt.[name] = t.[name] and tt.[date] = t.[date] and tt.[time] = t.[time]
    where tt.[name] is null
__________________
per aspera ad astra
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.