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

Откуда:
Сообщений: 48
Доброе время суток!

Есть таблица вида:
ДАТА | XV | TARHV | SQ |
01/01/2013 | 1 | 22.5 | NULL|
02/01/2013 | 1 | 22.5 | NULL|
03/01/2013 | 2 | 22.5 | NULL |
04/01/2013 | 2 | 22.5 | NULL |
...
10/01/2013 | 2 | 22.5 | 5 |
....
31/01/2013 | 2 | 23.5 | 5 |


Нужно получить строки с датами у которых уникальные (не считая даты) значения:
Результат по таблице выше должен быть таким:

ДАТА | XV | TARHV | SQ |
01/01/2013 | 1 | 22.5 | NULL|
03/01/2013 | 2 | 22.5 | NULL |
10/01/2013 | 2 | 22.5 | 5 |
31/01/2013 | 2 | 23.5 | 5 |

Помогите с запросом, или хоть направьте в каком направлении копать..
9 дек 13, 09:23    [15262541]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
kalakhary
Member

Откуда:
Сообщений: 17
Doctormom,
вы из данных
01/01/2013 | 1 | 22.5 | NULL|
02/01/2013 | 1 | 22.5 | NULL|
03/01/2013 | 2 | 22.5 | NULL |
04/01/2013 | 2 | 22.5 | NULL |
по какому принципу выбрали
01/01/2013 | 1 | 22.5 | NULL|
03/01/2013 | 2 | 22.5 | NULL |
?
9 дек 13, 09:33    [15262569]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Doctormom
Member

Откуда:
Сообщений: 48
В
03/01/2013 | 2 | 22.5 | NULL |
Произошло изменения значения XV.

Т.е. получается, что с 01/01/2013 по 02/01/2013 - действовали одни значения
03/01/2013 - произошло изменение

Далее они не менялись до 10/01/2013.

Вот так и получается
01/01/2013 | 1 | 22.5 | NULL|
03/01/2013 | 2 | 22.5 | NULL |
10/01/2013 | 2 | 22.5 | 5 |
9 дек 13, 09:45    [15262629]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
kalakhary
Member

Откуда:
Сообщений: 17
сначала min()
потом distinct
9 дек 13, 09:57    [15262701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
kalakhary,

Если я правильно сванговал кофейной гущей в хрустальном шаре, то не сработает. Так как человеку нужно отследить дату изменения значения в любом одном из полей. А не получить максимальную/минимальную дату с заданным значением.
9 дек 13, 10:39    [15262907]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
Doctormom,

(исключительно ради проверки собственных телепатических способностей) если на входе будут примерно такие данные:
то что должно быть на выходе?
ДАТА XV TARHV SQ
01/01/2013 1 22.5 NULL
02/01/2013 1 22.5 NULL
03/01/2013 2 22.5 NULL
04/01/2013 1 22.5 NULL
10/01/2013 2 22.5 5
31/01/2013 1 23.5 5
9 дек 13, 10:42    [15262929]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Doctormom
Member

Откуда:
Сообщений: 48
Добрый Э - Эх,

01/01/2013 1 22.5 NULL
03/01/2013 2 22.5 NULL
04/01/2013 1 22.5 NULL
10/01/2013 2 22.5 5
31/01/2013 1 23.5 5


Извиняюсь за оформление, еще не понял как тут нормальные таблицы делать :(
9 дек 13, 10:58    [15263020]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
Doctormom,

то есть, моё предположение о том, что тебя интересуют строки, в которых произошло изменение значения какого-либо поля - оказалось правильным?

З.Ы.
версию сервера озвучь, на всякий случай...
Но вообще, сам собой напрашивается инвариант группы. :)
9 дек 13, 11:01    [15263043]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Doctormom
Member

Откуда:
Сообщений: 48
Да вы абсолютно правы.

Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
Dec 28 2012 20:23:12
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

С группой, что то не смог ничего придумать :(
9 дек 13, 11:06    [15263097]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
select min([ДАТА]) as [ДАТА], xv, tarhv, sq
  from (
         select t.*, 
                row_number()over(partition by xv, tarhv, sq order by "ДАТА" ) -
                row_number()over(order by "ДАТА") as grp_id
           from t
        ) v
 group by xv, tarhv, sq, grp_id
 order by [ДАТА]
9 дек 13, 11:12    [15263135]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Добрый Э - Эх
Guest
чего-то с квотированием русскоязычных наименований полей попутал синтаксисы всех серверов... :)
Добрый Э - Эх
select min([ДАТА]) as [ДАТА], xv, tarhv, sq
  from (
         select t.*, 
                row_number()over(partition by xv, tarhv, sq order by [ДАТА] ) -
                row_number()over(order by [ДАТА]) as grp_id
           from t
        ) v
 group by xv, tarhv, sq, grp_id
 order by [ДАТА]
9 дек 13, 11:14    [15263146]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Doctormom
Member

Откуда:
Сообщений: 48
Огромное спасибо! Попробую использовать!
9 дек 13, 12:26    [15263762]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить