Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом / 4 сообщений из 4, страница 1 из 1
04.09.2015, 17:13
    #39043673
kassak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Доброго времени суток!
Имеется задача - написать select запрос для таблицы counter_pok.
В таблице имеются поля: number (номер счетчика), pok (показания) и d_enter (дата ввода). Ограничений на поля нет. Требуется написать запрос для вывода для каждого номера счетчика максимальное значение даты (т.е. сгруппировать по number).
Есть вариант: SELECT number, MAX(d_enter) FROM counter_pok GROUP BY number;
Выведет таблицу из двух колонок: number и MAX. Но мне нужно чтобы вывелась таблица из трех колонок: номер счетчика number, максимальная дата d_enter для каждого счетчика и показания для максимального значения (pok). Как это сделать? Заранее спасибо.
...
Рейтинг: 0 / 0
04.09.2015, 17:18
    #39043678
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
кучно пошли.
из одной группы наверное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.09.2015, 17:22
    #39043687
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Диагноз: плохо спроектированная база ногам покоя не даёт. Раздели таблицу на две:
"последние значения" и "история значений". Вторую веди триггерами. Запрос станет тривиальным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.09.2015, 17:37
    #39043697
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
kassak,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
with counter_pok(number, pok, d_enter) as (
   select 1, 123, date '01.01.2003' from rdb$database
   union all
   select 2, 124, date '01.02.2003' from rdb$database
   union all
   select 1, 125, date '01.03.2003' from rdb$database
   union all
   select 3, 126, date '01.04.2003' from rdb$database
   union all
   select 1, 127, date '01.05.2003' from rdb$database
   union all
   select 2, 128, date '01.06.2003' from rdb$database
   union all
   select 3, 129, date '01.07.2003' from rdb$database
),
t as (
select
  number,
  pok,
  d_enter,
  max(d_enter) over(partition by number) as d
from counter_pok)
select
  number,
  pok,
  d_enter
from t
where d_enter = d
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]