Выборка части данных
От: McQwerty Россия  
Дата: 10.01.14 09:14
Оценка:
Приветствую.

есть MS SQL (вроде, 7 версии) и кучка таблиц в нём.
В одной таблице хранится история изменения группы параметров.
Каждая табличка имеет такие поля:
aDate — дата и время записи
aIndex — номер параметра
aZ — значение параметра
aDost — подходящее ли значение (достоверность).

Записи для каждого параметра (различных значений aIndex) попадают независимо друг от друга. Возможно, на одно время есть несколько различных записей. В сутки примерно 300 штук для каждого значения aIndex.

Чего хочется: хочется запрос для выборки первого значения (aZ) в сутках для каждого параметра (различные aIndex) у которого (aDost > 0). Примерно так:
aDate aIndex aZ aDost
2014-01-01 00:00:06 0 12.6 5
2014-01-01 00:01:10 1 15.1 4
2014-01-01 00:00:02 2 11.8 5
2014-01-02 00:00:11 0 11.6 5
2014-01-02 00:00:41 1 16.1 5
2014-01-02 00:00:35 2 11.9 4

Сейчас реализовал на курсоре — но, мне кажется можно и запрос написать. Помогите мне с ним, если я не ошибаюсь.
Re: Выборка части данных
От: night beast СССР  
Дата: 10.01.14 09:58
Оценка: 6 (1)
Здравствуйте, McQwerty, Вы писали:

MQ>Приветствую.


MQ>есть MS SQL (вроде, 7 версии) и кучка таблиц в нём.

MQ>В одной таблице хранится история изменения группы параметров.

MQ>Чего хочется: хочется запрос для выборки первого значения (aZ) в сутках для каждого параметра (различные aIndex) у которого (aDost > 0). Примерно так:

MQ>aDate aIndex aZ aDost
MQ>2014-01-01 00:00:06 0 12.6 5
MQ>2014-01-01 00:01:10 1 15.1 4
MQ>2014-01-01 00:00:02 2 11.8 5
MQ>2014-01-02 00:00:11 0 11.6 5
MQ>2014-01-02 00:00:41 1 16.1 5
MQ>2014-01-02 00:00:35 2 11.9 4

MQ>Сейчас реализовал на курсоре — но, мне кажется можно и запрос написать. Помогите мне с ним, если я не ошибаюсь.


если правильно понял то что-то вроде (возможны дубли если время совпадает):
select *
from (
   select convert(date,aDate) dd, aIndex, min( aDate ) aDate
   from table
   where aDost > 0
   group by convert(date,aDate), aIndex
) t1
join table t2 on t1.aDate = t2.aDate and t1.aIndex = t2.aIndex
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.