Несколько макс. значений в запросе

Одна вещь, которая мне действительно нравится в Git, это то, что репо у твоего разработчика. среда это ваше РЕПО. Это копия репозитория сопровождающего. Вы свободны делать все, что захотите, в этом репо, и вы не будете отмечать сопровождающего, если не добавите несколько сумасшедших историй.

Для этого используйте ветвление и слияние в своих интересах настолько, насколько это возможно, чтобы помочь в развитии и экспериментах. Нажимайте только те изменения, которые вам наиболее удобны. Git даже дает вам возможность разделить историю ваших коммитов на меньшее количество наборов изменений, если это необходимо, чтобы вы могли перенести серию коммитов, которые вы выполнили, в один коммит.

Гибкость чрезвычайно расширяет возможности вашего личного рабочего процесса, а также политики ваших коллег.

6
задан APC 7 June 2019 в 15:39
поделиться

6 ответов

We can use multiply columns in an IN clause:

select id, bdate, value 
from myview 
where (id, bdate) in
    (select id, max(bdate)
     from myview group by id)
/
12
ответ дан 8 December 2019 в 03:27
поделиться

you can use the MAX...KEEP(DENSE_RANK FIRST...) construct:

SQL> SELECT ID,
  2         MAX(bdate) bdate,
  3         MAX(VALUE) KEEP(DENSE_RANK FIRST ORDER BY bdate DESC) VALUE 
  4   FROM DATA
  5  GROUP BY ID;

        ID BDATE            VALUE
---------- ----------- ----------
     28911 24/04/2009  7749594,67
     38537 22/04/2009    81098692
     38605 23/04/2009     6936575

This will be as efficient as the analytics method suggested by Majkel (no self-join, a single pass on the data)

12
ответ дан 8 December 2019 в 03:27
поделиться

Вы можете использовать INNER JOIN, чтобы отфильтровать только максимальное количество строк:

select t.*
from YourTable t
inner join (
     select id, max(bdate) as maxbdate
     from YourTable
     group by id
) filter
    on t.id = filter.id
    and t.bdate = filter.maxbdate

Это напечатает:

id     bdate       value
38605  2009-04-23  6936575
38537  2009-04-22  81098692
28911  2009-04-24  7749594.67

Обратите внимание, что это вернет несколько строк для идентификатора, который имеет несколько значений с одинаковыми bdate.

3
ответ дан 8 December 2019 в 03:27
поделиться
SELECT id, bdate, value FROM myview
 WHERE (id, bdate) IN (SELECT id, MAX(bdate) FROM myview GROUP BY id)

(untested... I don't have Oracle available right now...)

0
ответ дан 8 December 2019 в 03:27
поделиться

Вы можете использовать аналитику:

select 
      id, bdate, value 
    from
      (
        select
          id, bdate, value, max( bdate ) over ( partition by id ) max_bdate
        from
          myview
      )
    where
      bdate = max_bdate
2
ответ дан 8 December 2019 в 03:27
поделиться
select a.* from myview a, (select id, max(bdate) from myview group by id) b
where a.id = b.id and a.bdate = b.bdate
0
ответ дан 8 December 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: