Выберите запрос, чтобы вернуть только минимальную дату и время без группы по? - PullRequest
0 голосов
/ 07 мая 2020

В моей таблице отображается, как показано ниже,

|_______________|____________|_____________________|______________________|
|  ENTRY POINT  |    NAME    |    DATE OF ENTRY    |   DATETIME OF ENTRY  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN    |  CHOCOTACO |     05/07/2018      | 05/07/2018 00:01:00  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN 1  |  CHOCOTACO |     05/07/2018      | 05/07/2018 00:01:10  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN 2  |  CHOCOTACO |     05/07/2018      | 05/07/2018 00:01:15  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN 10 |  CHOCOTACO |     06/07/2018      | 06/07/2018 00:07:10  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN 4  |  CHOCOTACO |     06/07/2018      | 06/07/2018 00:07:10  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN 5  |  CHOCOTACO |     06/07/2018      | 06/07/2018 00:09:15  | 
|_______________|____________|_____________________|______________________| 

Ожидаемый результат - это только первое значение, которое имеет минимальное ВРЕМЯ ВХОДА для каждого дня, как показано ниже,

|_______________|____________|_____________________|______________________|
|  ENTRY POINT  |    NAME    |    DATE OF ENTRY    |   DATETIME OF ENTRY  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN    |  CHOCOTACO |     05/07/2018      | 05/07/2018 00:01:00  | 
|_______________|____________|_____________________|______________________|
|    CHECKIN 10 |  CHOCOTACO |     06/07/2018      | 06/07/2018 00:07:10  | 
|_______________|____________|_____________________|______________________|

Если я попробую чтобы взять минимальную ДАТУ ВРЕМЕНИ ВХОДА, это, вероятно, заставляет меня использовать group by 'ТОЧКА ВХОДА' и другой столбец, который в основном дает мне тот же результат, что и мой ввод.

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вам нужно окно аналитики c, функции которого DENSE_RANK() подходят для включения всех связей ( записи с одинаковыми [DATETIME OF ENTRY] значениями для каждой [NAME] и [DATE OF ENTRY] комбинации ) .

Необходимо найти первую запись (и) упорядоченного по возрастанию [DATETIME OF ENTRY] значения, сгруппированного (разбитого) по каждому [NAME] и [DATE OF ENTRY]:

SELECT [ENTRY POINT], [NAME], [DATE OF ENTRY], [DATETIME OF ENTRY]
  FROM
 (
  SELECT T.*,
         DENSE_RANK() OVER 
              (PARTITION BY [NAME], [DATE OF ENTRY] ORDER BY [DATETIME OF ENTRY]) AS dr
    FROM T -- <your table>
  ) TT
  WHERE dr = 1;
1 голос
/ 07 мая 2020

Вы можете использовать оконную функцию row_number(). вот демо .

select
    ENTRY_POINT,   
    NAME, 
    DATE_OF_ENTRY,   
    DATETIME_OF_ENTRY
from    
(
    select
        *,
        row_number() over (order by DATETIME_OF_ENTRY) as rnk
    from myTable
) t
where rnk = 1 
...