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

Откуда:
Сообщений: 18
Добрый день.
Прошу помощи с запросом, хотя бы направьте в нужное русло. Пока ещё не научился думать запросами.
Ситуация:
Операторы принимают показания счётчиков, данные по принятым оператором счётчикам заносятся в таблицу:
OpName-Фамилия Имя оператора
count - принятый счетчик.
OpName count
Иванова Светлана 23453
Сидорова Татьяна 23468
Иванова Светлана 75972
Иванова Светлана 29572
Петрова Наталья 93472
Сидорова Татьяна 24722
Петрова Наталья 75972


По итогам приёма показаний - считается кол-во принятых каждым оператором счётчиков:
select OpName,count(*) from [dbo].[OpCounterCount] GROUP BY OpName


Проблема в том, что если счётчик принят два раза и более (в примере - это счётчик 75972), то этот счётчик засчитывается двум операторам.
Вопрос: Как засчитать счётчик только опертору, который первым принял этот счётчик?
19 ноя 13, 16:03    [15155545]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
Glory
Member

Откуда:
Сообщений: 104751
peektoseen
Вопрос: Как засчитать счётчик только опертору, который первым принял этот счётчик?

А первый оператор это тот, у которого фамилия стоит выше в алфавитном порядке ?
19 ноя 13, 16:06    [15155565]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
select y.OpName, count(*)
from
(
   select x.OpName, x.[count]
   from
   (
      select t.OpName, t.[count], row_number() over(partition by t.[count] order by t.Date) as rn
      from OpCounterCount t
   ) x
   where x.rn = 1
) y
group by y.OpName
19 ноя 13, 16:11    [15155612]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
peektoseen
Member

Откуда:
Сообщений: 18
Glory, добавил поле-автоинкремент Id.
Теперь первый - у кого Id меньше.
19 ноя 13, 16:12    [15155617]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
declare @t table ( FIO varchar(155), cn int,id  int identity )
insert  into @t
        ( FIO, cn )
values  ( 'Иванова Светлана', 23453 )
,       ( 'Сидорова Татьяна', 23468 )
,       ( 'Иванова Светлана', 75972 )
,       ( 'Иванова Светлана', 29572 )
,       ( 'Петрова Наталья', 93472 )
,       ( 'Сидорова Татьяна', 24722 )
,       ( 'Петрова Наталья', 75972 ) ;
with  cte
        as ( select FIO
                  , cn
                  , row_number() over ( partition by cn order by id ) as rn
             from   @t
           )
  select  FIO
        , count(*) as qty
  from    cte
  where   rn = 1
  group by FIO;
19 ноя 13, 16:15    [15155639]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
aleks2
Guest
declare @t table ( OpName varchar(155), cn int, id  int identity )
insert  into @t
        ( OpName, cn )
values  ( 'Иванова Светлана', 23453 )
,       ( 'Сидорова Татьяна', 23468 )
,       ( 'Иванова Светлана', 75972 )
,       ( 'Иванова Светлана', 29572 )
,       ( 'Петрова Наталья', 93472 )
,       ( 'Сидорова Татьяна', 24722 )
,       ( 'Петрова Наталья', 75972 ) ;

select o.OpName, count(*) 
  from @t o right outer join (select min(id) id from @t group by cn) x on x.id = o.id
  GROUP BY o.OpName;
19 ноя 13, 16:27    [15155746]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
petre
Member

Откуда: Кривой Рог
Сообщений: 42
А как проанализировать ситуацию, когда два разных оператора снимают показания двух разных счетчиков у которых одинаковые показания?
19 ноя 13, 16:37    [15155837]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с запросом.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
petre
А как проанализировать ситуацию, когда два разных оператора снимают показания двух разных счетчиков у которых одинаковые показания?

Так эти ваши 23453, 23468, 75972 — это не идентификаторы счётчиков, что ли?
Ну используйте идентификаторы тогда.
19 ноя 13, 17:19    [15156270]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить