我有一个名为TEST
的表,其中包含5列:clientName, clientID, productNum, orderNum, orderDeliveryDate
和数千行。它基本上存储订单。每个订单可以由多个产品项组成,每个产品项可以具有特定的交货日期。
我需要获取一个表格,其中显示每个orderNum
最新的orderDeliveryDate
以及其他TEST
表格列(nb:NULL
值必须为被排除在外,因为它不应被视为有效日期。)
我知道我需要使用JOIN,但无法找到解决方案。
SELECT *
FROM `TEST`
INNER JOIN
(SELECT
orderNum, MAX(orderDeliveryDate) AS maxdate
FROM TEST
GROUP BY orderNum) groupedorders ON TEST.orderNum = groupedorders.orderNum
AND TEST.orderDeliveryDate = groupedorders.maxdate
GROUP BY orderNum
ORDER BY groupedorders.maxdate ASC
任何人都可以帮我解决这个问题吗?
感谢您的帮助。
答案 0 :(得分:1)
你不需要加入,除非你想挂钩另一个表。您需要做的就是获取MAX值。 NULL值通常从分组中排除,但如果需要,只需添加WHERE orderDeliveryDate IS NOT NULL
SELECT orderNum, MAX(orderDeliveryDate) maxDeliveryDate
FROM test
GROUP BY orderNum
但是,如果您需要显示更多数据,而不仅仅是orderNum
和最新delivery
日期,请详细说明。
编辑: 这将带回到昨天的最新交货日期
SELECT T.*
FROM TEST T
INNER JOIN(
SELECT orderNum, MAX(orderDeliveryDate) AS maxDeliveryDate
FROM TEST
WHERE orderDeliveryDate <= (yesterday)
GROUP BY orderNum) MX
ON T.orderNum= MX.orderNum
AND T.orderDeliveryDate = MX.maxDeliveryDate
EDIT2: 以下查询将返回所有具有最新交付日期=昨天
的记录SELECT T.*
FROM TEST T
INNER JOIN(
SELECT orderNum, MAX(orderDeliveryDate) AS maxDeliveryDate
FROM TEST
GROUP BY orderNum) MX
ON T.orderNum= MX.orderNum
AND T.orderDeliveryDate = MX.maxDeliveryDate
AND MX.maxDeliveryDate = =DATE_SUB(curdate(),INTERVAL 1 DAY)