Найти MAX из поля1, соответствующего поля2, GROUP BY field3 - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть данные типа:

id, id2, datetime_created
1, 1, 9/10
1, 2, 9/9
1, 3, 9/8
2, 4, 9/8
2, 5, 9/2
2, 6, 9/1
3, 7, 9/3
3, 8, 9/4
3, 9, 9/5

Ожидаемый результат:

id, id2
1, 1
2, 4
3, 9

Я пробовал несколько вещей, в том числе:

SELECT id, id2, MAX(datetime_created)
FROM table
GROUP BY id2

,

SELECT id, id2, MAX(datetime_created)
FROM table
GROUP BY id, id2

,

SELECT id, id2
FROM table
INNER JOIN (
    SELECT MAX(datetime_created), id
    FROM table)

Этот вопрос был недостаточным.Кикер - это GROUP BY поле, отличное от того, которое мне нужно, без GROUP BY во втором поле, так как это возвращает слишком много строк (из моего образца набора данных он вернул бы все строки).

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете попробовать следующее:

SELECT id, id2
  FROM table
 WHERE (id, datetime_created) in
      (
        SELECT id, MAX(datetime_created)
          FROM table
         GROUP BY id
       )
ORDER BY id;

Rextester Demo [PS, даже если в Oracle работает та же логика]

0 голосов
/ 19 сентября 2018

Это может помочь вам:

SELECT tt.id,tt.id2 FROM table tt LEFT JOIN (SELECT id, MAX(datetime_created) AS cr
          FROM table 
         GROUP BY id)q ON q.id=tt.id AND q.cr=tt.datetime_created WHERE q.id IS NOT NULL;
0 голосов
/ 19 сентября 2018

Используйте row_number() over() вместо group by:

SELECT
    id, id2, datetime_created
FROM (
    SELECT
        id, id2, datetime_created
      , ROW_NUMBER() OVER (PARTITION BY id ORDER BY datetime_created DESC) AS rn
    FROM table1
) d
WHERE rn = 1

Это даст вам доступ ко всем строкам с максимальным значением даты и времени

Ссылка: Функция окна ROW_NUMBER

...