Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2013, 17:38   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
Восклицание sql выбор уникальных значений

Здравствуйте уважаемые форумчанины

Есть 2 таблицы Reference (справка) и Reference_Events (событие справок)
в таблице reference есть поля
id,
form_number - номер бумажной справки,
number_ - номер электронной справки
В таблице Reference_Events есть поля
id,
reference_id - ссылка на reference (один ко многим),
time_stamp - время события,
state_ - статус справки

Мне нужно узнать сколько справок бумажных и электронных справок, имеющий статус "1", было в базе на определенном интервале. Т.е. для каждой справки я должен взять найти первую дату.

Я сделал запрос, но он работает неверно, Он берет не первую дату, а первую дату, которая имеет статус "1"
Код:
select 
  sum(digital) as "digital", sum(hardcopy) as "hardcopy", sum(total) as "total"
from (
  select
    distinct re.reference_id,
    min(re.time_stamp),
    case when form_number is null and re.state_=1 then 1 else 0 end as digital,
    case when form_number is not null and re.state_=1 then 1 else 0 end as hardcopy,
    case when re.state_=1 then 1 else 0 end as total
  from
    Reference r
    join Reference_Events re on r.id=re.reference_id
  where
    re.time_stamp>=to_timestamp('01.09.2013 00:00:00','DD.MM.YYYY HH24:MI:SS')
    and trunc(re.time_stamp, 'DD')<=to_date('30.09.2013 23:59:59','DD.MM.YYYY HH24:MI:SS') 
    
  group by re.time_stamp, re.state_, form_number, re.reference_id
)
Не могли-бы вы подсказать, в чем причина?
world12_tk вне форума Ответить с цитированием
Старый 28.09.2013, 18:32   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а почему статус справки находится не в справке? что-то у вас тут перекручено
eval вне форума Ответить с цитированием
Старый 28.09.2013, 19:03   #3
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

в справке тоже есть статус, но reference_events отображает как менялся статус у справки, ведь за месяц, одна справка может поменять несколько раз свой статус
world12_tk вне форума Ответить с цитированием
Старый 28.09.2013, 19:52   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Код:
select 
  sum(digital) as "digital", sum(hardcopy) as "hardcopy", count(*) as "total"
from (
  select
    distinct re.reference_id,
    case when form_number is null then 1 else 0 end as digital,
    case when form_number is not null then 1 else 0 end as hardcopy,
  from
    Reference r
    join Reference_Events re on r.id=re.reference_id
  where re.state_=1 and
    re.time_stamp>=to_timestamp('01.09.2013 00:00:00','DD.MM.YYYY HH24:MI:SS')
    and trunc(re.time_stamp, 'DD')<=to_date('30.09.2013 23:59:59','DD.MM.YYYY HH24:MI:SS')
а так? по-быстрому переделал ваш
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор уникальных цифр из диапазона Tidus Microsoft Office Excel 23 02.04.2011 03:03
выбор уникальных значений олег69 Microsoft Office Excel 7 10.03.2011 14:15
Список уникальных значений PARTOS Microsoft Office Excel 13 18.12.2009 11:14
Отбор уникальных значений Alex___ Microsoft Office Excel 11 18.08.2009 19:31
Выборка уникальных значений Mary_star SQL, базы данных 9 11.02.2008 22:46