У вас есть несколько вариантов
SELECT DOC_NAME
FROM DOCUMENTS
WHERE DELIVERY_TIMESTAMP IN (
SELECT MAX(DELIVERY_TIMESTAMP)
FROM DOCUMENTS
)
Или с соединениями
SELECT DOC_NAME
FROM DOCUMENTS
INNER JOIN (
SELECT MAX(DELIVERY_TIMESTAMP) AS MAX_DELIVERY_TIMESTAMP
FROM DOCUMENTS
) AS M
ON M.MAX_DELIVERY_TIMESTAMP = DOCUMENTS.DELIVERY_TIMESTAMP
Ситуация усложняется, если в метке времени есть дубликаты или вам нужно несколько столбцов в ваших критериях "max" (поскольку MAX()
превышает один столбец для всех строк)
Здесь опция JOIN
является единственной доступной опцией, потому что подобная конструкция недоступна (скажем, несколько заказов с одинаковой временной меткой):
SELECT DOC_NAME
FROM DOCUMENTS
WHERE (DELIVERY_TIMESTAMP, ORDERID) IN (
SELECT TOP 1 DELIVERY_TIMESTAMP, ORDERID
FROM DOCUMENTS
ORDER BY DELIVERY_TIMESTAMP DESC, ORDERID DESC
)
Где вам на самом деле нужно будет сделать:
SELECT DOC_NAME
FROM DOCUMENTS
INNER JOIN (
SELECT TOP 1 DELIVERY_TIMESTAMP, ORDERID
FROM DOCUMENTS
ORDER BY DELIVERY_TIMESTAMP DESC, ORDERID DESC
) AS M
ON M.DELIVERY_TIMESTAMP = DOCUMENTS.DELIVERY_TIMESTAMP
AND M.ORDERID = DOCUMENTS.ORDERID