Я пытаюсь обернуть голову этим утром
Я пытаюсь показать inventory
статус для деталей (для наших продуктов), и этот запрос становится сложным, только если я пытаюсь вернуть все детали.
Позвольте мне выложить это:
- один стол
inventoryReport
- У меня есть отдельный список X частей, которые я хочу отобразить, в результате должно быть X # рядов (1 строка на деталь, показывающую последнюю запись инвентаря).
- состоит из датированных записей об изменениях запасов (поэтому мне нужна только запись даты
LATEST
для каждой детали).
- все данные, содержащиеся в этой единственной таблице, поэтому объединений не требуется.
В настоящее время для 1 отдельной части это довольно просто, и я могу сделать это, выполнив следующий sql (чтобы дать вам некоторое представление):
SELECT TOP (1) ldDate, ptProdLine, inPart, inSite, inAbc, ptUm, inQtyOh + inQtyNonet AS in_qty_oh, inQtyAvail, inQtyNonet, ldCustConsignQty, inSuppConsignQty
FROM inventoryReport
WHERE (ldPart = 'ABC123')
ORDER BY ldDate DESC
, что дает мне мой ТОП-1 ряд, такой простой для каждой части, однако мне нужно показать все X (скажем, 30 частей). Так что мне нужно 30 строк, с таким результатом. Конечно, простым решением было бы зациклить X # вызовов sql в моем коде (но это было бы дорого), и этого было бы достаточно, но для этой цели я хотел бы еще немного поработать с этим SQL, чтобы уменьшить количество вызовов x # до db. (если не нужно) до 1 запроса.
Из того, что я вижу здесь, мне нужно как-то отслеживать последнюю дату для каждого элемента при поиске набора результатов.
Я бы в конечном итоге сделал
WHERE ldPart in ('ABC123', 'BFD21', 'AA123', etc)
для ограничения частей, которые мне нужны. Надеюсь, я достаточно ясно изложил свой вопрос. Дайте мне знать, если у вас есть идея. Я не могу сделать DISTINCT
, так как строки не совпадают, дата должна быть самой последней, и мне нужно максимум X строк.
Мысли? Я застрял ...