Получить PID процесса, используя экземпляр в коде [duplicate]

На первый взгляд ...

Все, что вам нужно, - это предложение GROUP BY с агрегатной функцией MAX:

SELECT id, MAX(rev)
FROM YourTable
GROUP BY id

Это никогда не бывает так просто, это ?

Я просто заметил, что вам нужен столбец content.

Это очень распространенный вопрос в SQL: найти все данные для строки с некоторым максимальным значением в столбца на один идентификатор группы. Я много слышал о своей карьере. На самом деле, это был один из вопросов, которые я ответил в техническом интервью моей текущей работы.

На самом деле настолько распространено, что сообщество StackOverflow создало один тег только для решения таких вопросов: .

В принципе, у вас есть два подхода к решению этой проблемы:

Соединение с простым group-identifier, max-value-in-group Sub-query

В этом подходе вы сначала найдете group-identifier, max-value-in-group (уже решены выше) в подзапросе. Затем вы присоединяетесь к своей таблице к подзапросу с равенством как на group-identifier, так и на max-value-in-group:

SELECT a.id, a.rev, a.contents
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(rev) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev

Левое соединение с помощью себя, настройки условий и фильтров

In этот подход, вы оставили присоединиться к таблице с собой. Равенство, конечно, идет в group-identifier. Затем два умных перемещения:

  1. Второе условие соединения имеет значение слева ниже правого значения
  2. . Когда вы делаете шаг 1, строки (строки), которые на самом деле имеют максимальное значение будет иметь NULL в правой части (это LEFT JOIN, помните?). Затем мы фильтруем объединенный результат, показывая только строки, где правая сторона NULL.

Итак, вы закончите:

SELECT a.*
FROM YourTable a
LEFT OUTER JOIN YourTable b
    ON a.id = b.id AND a.rev < b.rev
WHERE b.id IS NULL;

Заключение

Оба подхода приносят точный результат.

Если у вас есть две строки с max-value-in-group для group-identifier, обе строки будут в результате в обоих подходах.

Оба подхода совместимы с SQL ANSI, таким образом, будут работать с вашей любимой РСУБД, независимо от ее «вкуса».

Оба подхода также дружелюбны к производительности, однако ваш пробег может варьироваться (РСУБД, структура БД, индексы и т. д.). Поэтому, когда вы выбираете один подход над другим, benchmark . И убедитесь, что вы выбрали тот, который вам больше всего подходит.

5
задан Mike Marynowski 18 February 2011 в 21:51
поделиться

1 ответ

Если вы управляете (пишете код для) как сервером, так и клиентом, вы можете добавить метод к вашему COM-интерфейсу, который вернет идентификатор процесса / потока или что-либо подобное (например, имя хоста сервера, если оно удалено) на конец сервера. Я второй @Hans - если у вас нет доступа к реализации сервера, вам может быть не повезло по дизайну.

6
ответ дан Valery Arkhangorodsky 5 September 2018 в 10:47
поделиться
Другие вопросы по тегам:

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