Найдите строку с максимальным значением идентификатора в MySQL

Таким образом что относительно C++. Сделайте я должен перейти к длинам:

template <int BITS> struct int_traits_t;
template <> struct int_traits_t <16> {typedef uint16_t int_t;};
template <> struct int_traits_t <32> {typedef uint32_t int_t;};
template <> struct int_traits_t <64> {typedef uint64_t int_t;};
typedef int_traits_t <sizeof (void*) * 8>::int_t myintptr_t;

только для получения портативного целого числа размера указателя?

5
задан Owen Blacker 18 January 2012 в 15:41
поделиться

6 ответов

Здесь вам понадобится дополнительный запрос:

SELECT a.id, a.version
FROM articles a
WHERE a.version = (
    SELECT MAX(version)
    FROM articles b
    WHERE b.articleId = a.articleId
)
5
ответ дан 18 December 2019 в 08:29
поделиться

Из руководства MySQL , это помогает:

SELECT a1.id
FROM Articles a1
LEFT JOIN Articles a2 ON a1.articleId = a2.articleId AND a1.version < a2.version
WHERE a2.articleId IS NULL;

Из связанного руководства:

LEFT JOIN работает на основе что когда s1.price a1.version находится на своем максимальном минимальном значении, не существует s2.price a2.version ] с большим меньшим значением и, следовательно, соответствующее значение s2.article a2.articleId равно NULL .

(я редактировал чтобы их текст соответствовал вашей ситуации.)

6
ответ дан 18 December 2019 в 08:29
поделиться

Здесь вы можете использовать подзапрос:

select
    a.id
from
    articles a
where
    a.version = (select max(version) from articles)

Поскольку это не коррелированный подзапрос, он будет довольно быстрым (так же быстро или быстрее, чем соединение), поэтому вам не нужно беспокоиться об этом. Но он вернет все значения с максимальным articleid .

Конечно, я бы порекомендовал вам добавить индекс на articleid (при условии id уже сгруппирован). Это поможет вернуть его еще быстрее.

Как отмечено в комментариях, если вы хотите получить максимальную версию для каждого идентификатора статьи , вы можете сделать следующее:

select
    a.id
from
    articles a
    inner join (select articleid, max(version) 
                from articles group by articleid) as b on
        a.articleid = b.articleid
        and a.version = b.version

Это создаст объединение этого подзапроса и обычно намного быстрее, чем коррелированный подзапрос, который выбирает максимальное значение для каждого articleid .

4
ответ дан 18 December 2019 в 08:29
поделиться

ВЫБРАТЬ Articles.id ИЗ статей, ГДЕ Articles.version IN (ВЫБРАТЬ МАКС. (Articles.version) из статей)

1
ответ дан 18 December 2019 в 08:29
поделиться

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

выберите * из статей, где ID статьи (выберите макс. (Версия статьи) из статей)

1
ответ дан 18 December 2019 в 08:29
поделиться

Вы можете сделать

SELECT articles.id
  FROM articles a
 WHERE NOT EXISTS(SELECT * FROM articles a2 WHERE a2.version > a.version)

Я не знаю, что MySQL будет работать с этим, но Oracle и SQL-сервер с этим справятся.

1
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

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