SQL Query – Left Join Group By

У меня две таблицы:

Первый – для деталей приемов, второй – для заголовков приемов.

CREATE TABLE ACH_ReceptionsDet ( IdReception bigint NOT NULL, IdProd bigint, QteRecue numeric(16,5), ); CREATE TABLE ACH_ReceptionsEnt ( IdReception bigint PRIMARY KEY NOT NULL, DateRec datetime NOT NULL, ); 

Я хотел бы получить последние IdProd, QteRecue, DateRec для каждого IdProd. Другими словами, я хотел бы получить последний прием каждой продукции.

РЕДАКТИРОВАТЬ :

На данный момент я могу получить DateRecep и IdProd, как это (результаты 4862) :

 SELECT MAX(E.DateRec) AS DateRecp, D.IdProd FROM ogasys.ACH_ReceptionsDet D LEFT JOIN ogasys.ACH_ReceptionsEnt E ON D.IdReception = E.IdReception GROUP BY D.IdProd 

Я не могу добавить D.QteRecue в select, потому что он не содержится в агрегатной функции или в предложении GROUP BY. Я не понимаю, как это сделать.

Если я запустил этот запрос (результаты 4862) :

 SELECT count(DISTINCT Idprod) FROM ogasys.ACH_ReceptionsDet 

Но если я добавлю E.QteRecue (результаты 6973)

 SELECT MAX(E.DateRec) AS DateRecp, D.IdProd, **E.QteRecue** FROM ogasys.ACH_ReceptionsDet D LEFT JOIN ogasys.ACH_ReceptionsEnt E ON D.IdReception = E.IdReception GROUP BY D.IdProd, **E.QteRecue** 

Добавление столбца в группу должно устранить проблему:

 SELECT MAX(E.DateRec) AS DateRecp, D.IdProd, D.QteRecue FROM ogasys.ACH_ReceptionsDet D LEFT JOIN ogasys.ACH_ReceptionsEnt E ON D.IdReception = E.IdReception GROUP BY D.IdProd, D.QteRecue; 

Кажется, вам нужен row_number() :

 SELECT de.* FROM (SELECT DateRecp, D.IdProd, D.QteRecue, ROW_NUMBER() OVER (PARTITION BY D.IdProd ORDER BY DateRecp DESC) as seqnum FROM ogasys.ACH_ReceptionsDet D LEFT JOIN ogasys.ACH_ReceptionsEnt E ON D.IdReception = E.IdReception ) de WHERE seqnum = 1; 

Вы можете использовать sub-запрос, подобный этому

  SELECT temp.DateRecp, ,temp.IdProd ,R.QteRecue FROM ogasys.ACH_ReceptionsDet R INNER JOIN (SELECT MAX(E.DateRec) AS DateRecp ,D.IdProd FROM ogasys.ACH_ReceptionsDet D LEFT JOIN ogasys.ACH_ReceptionsEnt E ON D.IdReception = E.IdReception GROUP BY D.IdProd) AS temp ON R.IdProd = temp.IdProd 
Interesting Posts

Оптимизация SQL-запросов путем удаления оператора сортировки в плане выполнения

SQL выбрать столбец для обновления внутри условия CASE

Как сохранить значение из базы данных в виде переменной с помощью VB.net

Изменить все виды и сохраненные приоритеты, найти и заменить?

Зеркалирование базы данных SQL Express

SQL: рекурсивный поиск для каждой строки

Не удается подключиться к SQL Server с помощью SQLCMD через пакетный файл

Возврат вычисленного имени элемента из запроса XML FLWOR

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

Хотите преобразовать комплексный запрос Linq в хранимую процедуру

Ошибка триггера MSSQL с OPENQUERY для связанного сервера с MYSQL

Tablix: повторять строки заголовков на каждой странице, не работающей – Report Builder 3.0

Использование файла базы данных SQL Server из библиотеки классов в C #

Проверьте, является ли XML только определенной строкой?

SQL Server JOIN отсутствует значения NULL

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