Итак, у меня есть три таблицы (Products, Stock и ProductsBatches), и я пытаюсь получить партию, срок действия которой истекает первым (из ProductsBatches) для каждого продукта, и некоторую дополнительную информацию от Products (например, название продукта) и Stock (например, всегоколичество)
Мне удалось получить только самую раннюю дату для каждого продукта, но когда я добавляю некоторые другие столбцы и присоединения, это портит их и дает мне все виды дат.
PRODUCTS TABLE:
| PRODUCT ID (PK)| NAME | PRICE |
| 1 | CHEESE | 12.0 |
STOCK TABLE :
| PRODUCT ID (PFK)| TOTAL QUANTITY |
| 1 | 100 |
PRODUCTS BATCHES TABLE:
| PRODUCT ID (PFK) | BATCH (PFK) | BATCH QUANTITY | BATCH EXPIRY |
| 1 | XYZ | 50 | 2019-01-01 |
| 1 | XZZ | 50 | 2020-01-01 |
Пока у меня есть:
| PRODUCT ID | BATCH EXPIRY |
| | |
| 1 | 2019-01-01 |
С SELECT productID,min(batchExpiry) from PRODUCTSBATCHES group by (productID)
Что мне нужно:
|PRODUCT ID| NAME |TOTAL QUANTITY|PRICE|BATCH|BATCH QUANTITY|BATCH EXPIRY|
| 1 |CHEESE| 100 |12.0 | XYZ | 50 | 2019-01-01 |
Я пробовал это, но тоже не хорошо:
SELECT DISTINCT ON (b.productID) b.productID, p.name, s.totalquantity,
p.price, b.batch, b.batchquantity, b.batchExpiry
FROM productsbatches as b
INNER JOIN (
SELECT productID,min(batchExpiry) from PRODUCTSBATCHES group by (productID)
) as exmin b.productID = exmin.productID
INNER JOIN stock as s ON b.productID = s.productID
INNER JOIN products as p ON s.productID = p.productID
Спасибо.