Выберите количество () максимум () Дата - PullRequest
1 голос
/ 27 апреля 2010

У меня есть таблица с историей смен и номерами операций.

Я использую этот запрос для получения списка сотрудников и их общей смены, указав диапазон для подсчета:

SELECT ope_id, count(ope_id)
FROM operator_shift
WHERE ope_shift_date >=to_date( '01-MAR-10','dd-mon-yy') and ope_shift_date
<= to_date('31-MAR-10','dd-mon-yy')
GROUP BY OPE_ID 

, что дает

   OPE_ID      COUNT(OPE_ID)
     1            14
     2             7
     3             6
     4             6
     5             2
     6             5
     7             2
     8             1
     9             2
    10             4

10 выбранных строк.

Как выбрать сотрудника с наибольшим числом смен в указанной дате диапазона?

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Предполагается, что ваша версия Oracle достаточно новая для поддержки общих табличных выражений:

With ShiftCounts As
    (
    SELECT ope_id, count(ope_id) ShiftCount
        , ROW_NUMBER() OVER( ORDER BY Count(ope_id) Desc ) ShiftRank
    FROM operator_shift
    WHERE ope_shift_date >=to_date( '01-MAR-10','dd-mon-yy') 
        and ope_shift_date <= to_date('31-MAR-10','dd-mon-yy')
    GROUP BY OPE_ID 
    )
Select ope_id, ShiftCount
From ShiftCounts
Where ShiftRank = 1
0 голосов
/ 27 апреля 2010

Использование:

SELECT t.ope_id,
       t.num
  FROM (SELECT os.ope_id, 
               COUNT(os.ope_id) AS num
          FROM OPERATOR_SHIFT os
         WHERE os.ope_shift_date BETWEEN TO_DATE('01-MAR-10','dd-mon-yy') 
                                     AND TO_DATE('31-MAR-10','dd-mon-yy')
      GROUP BY os.ope_id
      ORDER BY num DESC) t
 WHERE ROWNUM = 1

Справка:

0 голосов
/ 27 апреля 2010

что-то вроде этого может быть:

SELECT TOP 1 ope_id, Count(ope_id)
FROM operator_shift
WHERE ope_shift_date >=to_date( '01-MAR-10','dd-mon-yy') and ope_shift_date
<= to_date('31-MAR-10','dd-mon-yy')
GROUP BY OPE_ID 
ORDER BY Count(ope_id) DESC
...