powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select
8 сообщений из 8, страница 1 из 1
Select
    #40089488
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый вечер, прошу помочь с такой задачей:
Нужно вывести в котором часу за одни сутки у каждого человека было максимальное значение колонки "D"
...
Рейтинг: 0 / 0
Select
    #40089537
UDW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую познакомиться с функцией extract().
...
Рейтинг: 0 / 0
Select
    #40089542
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UDW
Рекомендую познакомиться с функцией extract().
Дебильный совет.
...
Рейтинг: 0 / 0
Select
    #40089546
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH T AS (
           SELECT  B,
                   TRUNC(A,'HH') HOUR,
                   MAX(D) MAX_D
             FROM  TBL
             GROUP BY B,
                      TRUNC(A,'HH')
          )
SELECT  B,
        TRUNC(HOUR) DAY,
        MAX(HOUR) KEEP(DENSE_RANK LAST ORDER BY MAX_D) HOUR,
        MAX(MAX_D) MAX_D
  FROM  T
  GROUP BY B,
           TRUNC(HOUR)
/




Но это не учитывает "ничью" - за одни сутки у человека было несколько часов когда достигнуто максимальное значение колонки "D" и выводит последний такой час за эти сутки. Если надо все такие часы то:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH T AS (
           SELECT  B,
                   TRUNC(A,'HH') HOUR,
                   MAX(D) MAX_D,
                   DENSE_RANK() OVER(PARTITION BY B,TRUNC(TRUNC(A,'HH')) ORDER BY MAX(D) DESC) DRNK
             FROM  TBL
             GROUP BY B,
                      TRUNC(A,'HH')
          )
SELECT  B,
        TRUNC(HOUR) DAY,
        HOUR,
        MAX_D
  FROM  T
  WHERE DRNK = 1
/



SY.
...
Рейтинг: 0 / 0
Select
    #40089662
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Спасибо большое, а как сюда добавить колонку 'C' с теми же значениями , где 'D' максимум

WITH T AS (
SELECT B,
TRUNC(A,'HH') HOUR,
MAX(D) MAX_D
FROM TBL
GROUP BY B,
TRUNC(A,'HH')
)
SELECT B,
TRUNC(HOUR) DAY,
MAX(HOUR) KEEP(DENSE_RANK LAST ORDER BY MAX_D) HOUR,
MAX(MAX_D) MAX_D
FROM T
GROUP BY B,
TRUNC(HOUR)
...
Рейтинг: 0 / 0
Select
    #40089674
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609
SY,

Спасибо большое, а как сюда добавить колонку 'C' с теми же значениями , где 'D' максимум

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH T AS (
           SELECT  B,
                   TRUNC(A,'HH') HOUR,
                   MAX(D) MAX_D
             FROM  TBL
             GROUP BY B,
                      TRUNC(A,'HH')
          )
SELECT  B,
        TRUNC(HOUR) DAY,
        MAX(HOUR) KEEP(DENSE_RANK LAST ORDER BY MAX_D) HOUR,
        MAX(MAX_D) MAX_D
  FROM  T
  GROUP BY B,
           TRUNC(HOUR)

Для оформления кода используйте, пожалуйста, тэг SRC.
...
Рейтинг: 0 / 0
Select
    #40089686
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609

Спасибо большое, а как сюда добавить колонку 'C' с теми же значениями , где 'D' максимум


Никак, если только у человека гарантированно не более одной строки в час. Если да, то и GROUP BY не нужен:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH T AS (
           SELECT  T.*,
                   DENSE_RANK() OVER(PARTITION BY B,TRUNC(A) ORDER BY D DESC) DRNK -- или ROW_NUMBER если не учитывать "ничью"
             FROM  TBL T
          )
SELECT  A,
        B,
        C,
        D
  FROM  T
  WHERE DRNK = 1
/



SY.
...
Рейтинг: 0 / 0
Select
    #40089714
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Там не более одного в час , спасибо
Все варианты помогли )
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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