Поле MAX с возвратом T-SQL

У меня есть этот код:

SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE UserID <> 0 GROUP BY ItemID, UserID` 

Теперь это возвращает UserID для последней записи журнала для определенного элемента. Я бы предположил, что он будет делать то же самое, когда присоединяется к другой таблице, к которой я присоединен Item ID, например:

 SELECT it.ItemID, it.ItemName, UA.UserID FROM ItemTable it LEFT JOIN (SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE UserID <> 0 GROUP BY LogID, UserID ) AS UA ON it.ItemID = UA.ItemID 

Что происходит с этим кодом, так это то, что он возвращает Max LogID для каждого пользователя, который изменил Item, а не только максимальный логический код, как я предполагал бы. Что мне здесь не хватает?

Я также создал Scalar Function, где я бы ввел LogID LogID и вернул идентификатор пользователя и работал, но после его запуска он очень сильно замедляет работу, и я предполагаю, что это связано с запросом всех логических идентификаторов из исходной таблицы присоединение к ItemID.

 DECLARE @UID INT SELECT @UID = al.UserID FROM Log al WHERE al.LogID = @theID RETURN @UID 

И используйте его так:

 SELECT ItemID, ItemName, UDFGetModBy(MAX(UA.LogID)) FROM ItemTable it LEFT JOIN (SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE UserID <> 0 GROUP BY LogID, UserID) AS UA ON it.ItemID = UA.ItemID 

Схема таблицы элементов состоит из: ItemID, ItemName, CreatedDate
Схема таблицы журналов состоит из: LogID, ItemID (FK to Item Table), DateModified, UserID

Ожидаемый результат должен быть: it.ItemID, it.ItemName, al.UserID, al.DateModified

Чтобы пояснить далее: таблица журналов сохраняет новый логический код каждый раз, когда элемент был изменен пользователем, который не является системой ( UserID <> 0 ).

Также попробовали:

 SELECT it.ItemID, it.ItemName, UID = (SELECT al.UserID, MAX(al.LogID) AS 'LID' FROM Log al) WHERE al.UserID <> 0 AND it.ItemID = al.ItemID) FROM ItemTable it 

Но я могу получить only one expression can be specified in the select list when the subquery is not introduced with EXISTS ошибкой only one expression can be specified in the select list when the subquery is not introduced with EXISTS

Любые предложения, пожалуйста?

Вам нужно отфильтровать данные внутри select. Что-то (здесь нет sql):

 SELECT ItemID, ItemName, UDFGetModBy(MAX(UA.LogID)) FROM ItemTable it OUTER APPLY (SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE UserID <> 0 and ItemID = it.ItemID GROUP BY ItemID, UserID) 

Использование Outer Apply позволяет фильтровать данные в подзапросе.

Наконец, я решил, что вы можете сделать это таким образом в подзапросе:

 SELECT TOP 1 * FROM ItemTable ORDER BY DESC 

Это захватывает всю строку «LastLog», которую я искал. Не уверен, что это оптимально, но сейчас работает.

  • Адресная пар. - Этаж #
  • SQL Server: имя столбца max для нескольких столбцов для каждой строки
  • Заполнение столбца Datetime
  • У вас нет разрешения на использование ошибки с массовой загрузкой
  • Изменения обозревателя объектов MSSS Management Studio с 2005 по 2008 год
  • xp_regread () вернула ошибку 5, «Доступ запрещен».
  • SQL Server - Способы переименования имени таблицы
  • Я создал функцию SQL Server. Теперь я не могу найти его в SSMS
  • SQL принимает несколько «+» во время кодирования, но не создает ошибки во время выполнения, почему?
  • Подключение к серверу TFS в SQL Server Management Studio
  • Изменение местоположения данных автоматического восстановления в SQL Server Management Studio
  • Interesting Posts

    Получить первые N строк из базы данных с помощью Entity Framework

    Мне нужно удалить начальные нули после десятичной точки

    Sql Transaction не освобождает блокировку после фиксации

    SQl левое внешнее соединение для заполнения нулевого

    Как найти диапазон числа, в котором диапазоны даматически отображаются из другой таблицы?

    Ошибка ADO 16389 с локальным доступом SQL Server, сбой подключения к базе данных при использовании беспроводной карты

    TransactionScope поднимается до MSDTC при отправке между очередями?

    Получить значения выходных параметров из динамического SQL

    получить результат последнего процесса на кубе SSAS

    BCP для разделителя .csv

    Должен объявить скалярную переменную «@query» dynamic tsql для хранимой процедуры

    Как сохранить изменения в SQL Server Management Studio

    Как вернуть COUNT (*) и сохранить его в переменной для дальнейшего использования в VBscript

    Ошибка диспетчера конфигурации SQL Server: невозможно подключиться к поставщику WMI

    SQL Server «Недопустимое имя столбца» в транзакции

    Давайте будем гением компьютера.